mysql索引总结

mysql存储引擎,主流存储引擎有两种,主要区别

            1.MyISAM:表操作性能高,但不支持事务,InnoDB支持事务,mysql5.5以后默认的存储引擎

            2.MyISAM索引结构为B-TREE,InnoDB索引结构为B+TREE

            3.MyISAM索引文件和数据文件分离,InnoDB数据文件本身为B+TREE结构

    注:关于InnoDB使用B+TREE而不用红黑树。因为红黑树内存操作,不适合过大的数据量操作


索引结构类型:

            B-TREE:

                    1.树上所有节点元素不重复,每个节点都存储相应数据的引用。

                    2.数据从左到右递增,

                    3.叶子节点不存在指针

            B+TREE

                    1.叶子节点存储数据,包含父节点索引。非叶子节点不存储数据,所以父节点可以存储更多索引

                       *注* mysql读取按页读取,每页16k,每个索引节点8Byte+6Byte指针,所以每页大概1000多条数据

                    2.叶子节点为链表结构。节点之间用指针连接,方便区间查询

                    3.必须有主键,并推荐使用整型自增主键。若表中未创建主键,则默认生成一列主键

                    4.若为二级索引,则叶子节点存储主键id。这样能保证一致性,并节省空间。

                    5.二级索引查询会有回表操作,所以若查询使用二级索引推荐使用覆盖索引,这样不会有回表操作,查询性能高

            HASH

                    查询快,仅支持等于查询


sql索引使用注意事项

            1.使用全值匹配 。即使用有索引字段等于查询

            2.最左前缀法则。即若索引为联合索引,使用的查询字段不可跳过索引中的列

            3.不在索引列上做运算。如使用时间类型转换,left等运算,会导致索引失效

            4.尽量使用覆盖索引,即使用select 字段 代替select * 使用

            5.not in ,not exists ,  != ,is null , is not null无法使用索引

            6.like操作开头模糊无法使用索引。即%xxx

            7.若为字符串,不加‘’索引可能会失效

            8.in查询有可能会使用到索引。在阿里规范中(泰山版)有写in查询不超过1000,性能影响不大


关于count(*)  count(1) count(字段)

             若字段有索引则性能差距不大,使用执行计划可查看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 索引总结                                  --Kane 1. 索引   每个In...
    未名枯草阅读 1,087评论 0 1
  • http://www.cnblogs.com/frankielf0921/p/5930743.html mysql...
    snail_knight阅读 307评论 0 0
  • B-Tree索引 适用于全键型、键值范围、键前缀查找 全值匹配 匹配最左前缀 匹配列前缀 匹配范围值 精确匹配某一...
    低调的小玩偶阅读 154评论 0 0
  • 使用索引查询时,把索引列单独放在表达式一侧(id<4),否则索引可能无法生效(id-1<4); 索引的选择性:索引...
    ssk258阅读 169评论 0 0
  • 聚簇索引就是对磁盘上的实际数据重新组织以按照特定的一个或者多个列的值排序的算法 特点是存储数据的顺序和索引顺序一致...
    薛延祥阅读 876评论 0 3