数据库索引

1.注意事项

  1.1 mysql 5.7 innodb 这个版本一条sql里面索引只能用一条

  1.2 对于现在mysql5.7中,只有小于等于和小于才会触发索引。而大于则是无法触发索引,且小于可以乱序(mysql优化器优化了),但是按照最左匹配原则

  1.3 count(*) innnodb 没有缓存数据行数 数据量大的话查询就慢

2.B-Tree索引的限制
  • 如果不是按照索引的最左列开始查找,则无法使用索引。
  • 不能跳过索引中的列
  • 如果查询中有某列的范围查询,则其右边所有列都无法使用索引优化查询。
3.哈希索引限制:
  • 哈希索引只包含哈希值和行指针,不存储字段值,所以不能使用"覆盖索引"的优化方式,去避免读取数据表。
  • 哈希索引数据并不是按照索引值顺序存储的,索引也就无法用于排序
  • 哈希索引页不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容计算哈希值的。
  • 哈希索引只支持等值比较查询,包括=,in(),<=>,不支持任何范围查询。列入where price>100
  • 访问哈希索引的数据非常快,除非有很多哈希冲突(不同的索引列值却有相同的哈希值)
  • 如果哈希冲突很多的话,一些索引维护操作的代价也会很高。

4. 聚簇索引的叶子节点就是数据节点 innodb 使用的是聚簇索引 一个表只可有一个聚簇索引一般默认主键

  innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值

 非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针 MYISAM使用的非聚簇索引 一个表可以有多个非聚簇索引

原文地址:https://www.cnblogs.com/bug1024/p/11389732.html