一般情况下索引类型指的是B-Tree索引。
索引存储在引擎层,所以每个引擎实现不一样,有相同点和不同。
B-Tree通常意味着所有的值都是按顺序存储的,索引排序是根据建表时指定索引的顺序来的。
B-Tree索引适用全键值,键值范围,键前缀查找:
全值匹配:配备所有索引列;
匹配最左前缀:匹配索引第一列;
匹配列前缀:匹配某一列值得开头部分;
匹配范围值:设定查找值得范围;
精确匹配某一列,范围匹配另一列;
只访问索引的查询;
B-Tree的限制:
必须按照索引最左列开始查找;
不能跳过索引中的列;
如果查询中某列使用范围查询,其右边所有列都无法使用索引优化查找
innodb 支持“自适应哈希索引”,如果哪个索引使用频繁,innodb会在B-Tree基础上建立哈希索引,用户无法控制,但可以关闭;
三种加密函数crc32最简单,最快的哈希函数,FNV64 比crc32快,而且是64位可以以插件形式加入mysql,sha1(),md5()是强加密函数,计算出的哈希值很长,最大消除冲突;
高效的引用索引:
索引不能是表达式的一部分,也不能是函数的参数,养成使索引单独放在符号的一侧;
有时候需要索引很长的字符列,可以索引开始的部分字符;
聚蔟索引:聚蔟索引最大限度的提高了I/O密集型应用的性能,更新聚蔟索引列的代价很高;,插入时尽可能按主键顺序插入,innodb_autoinc_lock_mode锁的性能配置;
覆盖索引:如果一个索引包含所有的需要查询的字段值,就是覆盖索引