查看: 25|回复: 1

[Mysql] 创建高性能的索引的一些思路分享

[复制链接]
  • TA的每日心情
    难过
    2016-3-1 09:50
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 7 天前 | 显示全部楼层 |阅读模式
    独立的列和多列索引
    1、不要在多个列上建立单独的索引,单列的多个索引大部分情况下不能提升Mysql的查询性能。而是选择创建一个覆盖索引或者对索引列的顺序进行优化
    2、在一个多列的B-Tree索引中,索引列 的顺序意味着索引首先按照最左列进行排序,其次是第二列,等等。可以看出:索引可以按照升序或者降序进行扫描,来满足复合列顺序的Order by,group by 和distinct子句的查询。经验法则:将选择性最高的列放在前面(用于在where的条件查找)。 覆盖索引
    如果一个索引包含(覆盖)所有需要查询的字段的值,称之为“覆盖索引”。可以看出,覆盖索引只能针对某个查询sql 的概念,例如mysql就会减少访问数据量。同时对缓存的负载非常重要,这种情况下,响应时间大部分花在数据拷贝上。覆盖索引对于I/O密集型的应用也有帮助,因为索引比数据更小,更容易放入内存中。
    2、针对InnoDB的聚簇索引,InnoDB的二级索引在叶子节点保存了行的主键值,所以如果二级主键能耐够覆盖查询,则币可以避免对主键索引的二次查询。因为如果查询的列不在索引中,则mysql还得根据索引去磁盘中去读取每一行的数据(根据索引去找,这通常是随机的I/O)
    注意:因为覆盖索引必须要存储索引列的值,而哈希索引,空间索引和全文索引都不存储索引列的值,所有不能作为覆盖索引。在Mysql中,只能使用B-Tree索引作为覆盖索引
    您需要登录后才可以回帖 登录 | 注册青鸟豆号

    本版积分规则

    Copyright 1999-2018 Beijing Aptech Beida Jade Bird Information Technology Co.,Ltd

    北大青鸟IT教育 北京阿博泰克北大青鸟信息技术有限公司 版权所有

    京ICP备11045574号-3 京公网安备11010802013845号

    快速回复 返回顶部 返回列表