索引

减少查询需要扫描的数据量(加快了查询速度) 减少服务器的排序操作和创建临时表的操作(加快了groupby和orderby等操作) 将服务器的随机IO变为顺序IO(加快查询速度).但是索引占用磁盘或者内存空间 减慢了插入更新操作的速度。

Innodb B+树索引适用于

  • 全值匹配
  • 匹配最左前缀
  • 匹配列前缀
  • 匹配范围值
  • 精确匹配某一列并范围匹配另一列
  • 只访问索引的查询

B+树索引与哈希索引比较

  1. 哈希索引只支持等值查询,不支持任何范围查询,因为哈希索引数据不是按照索引值顺序存储,同样哈希索引不支持使用索引进行排序
  2. 哈希索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性
  3. 哈希索引只包含哈希值与行指针,任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询
  4. 哈希索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生哈希碰撞,此时效率可能极差.而B+树的查询效率比较稳定

聚簇索引和非聚簇索引

聚簇索引本质为一种数据的存储方式,通常是数据行存放在索引的叶子叶中。因为无法把数据行同时存放在两个地方,所以一个表只能有一个聚簇索引。Innodb通常通过主键索引聚簇数据。如果没有定义主键那么Innodb会选择第一个唯一非空索引作为聚簇索引,如果没有主键也没有合适的唯一索引,那么Innodb内部会生成一个隐藏的主键作为聚集索引。

前缀索引

在对一个比较长的字符串进行索引时,可以仅索引开始的一部分字符,这样可以大大的节约索引空间, 从而提高索引效率.但是这样也会降低索引的选择性.    

覆盖索引

当一个索引包含(或者说是覆盖)需要查询的所有字段的值时,我们称之为覆盖索引.

Innodb自适应哈希索引

Innodb存储引擎支持的哈希索引是自适应的,它会自动根据表的使用情况自动生成哈希索引,不能人为干预是否在一张表中生成 哈希索引。innoDB存储引擎会监控对表上各索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之 为自适应哈希索引.可以使用innodb_adaptive_hash_index参数来禁用或启用此特性,默认开启。

全文索引

高性能索引策略

  1. 独立的列,即索引列不能是表达式的一部分,也不能是函数的参数
  2. 前缀索引,对于索引字符列很长的情况可选择字符列开始部分作为索引,节省索引空间,但是也会降低索引选择性
  3. 避免为每个列创建单独的索引,应考虑使用联合索引
  4. 选择何时的索引列顺序,当不需要考虑排序和分组时,通常选择将选择性最高的列放在联合索引的前面

粥于于
9 声望1 粉丝

代码搬运工


« 上一篇
操作系统总结
下一篇 »
Innodb锁机制

引用和评论

0 条评论