标签:空间 group by 条件 size 临时表 重要 表达 高性能 范围查询
索引,MySQL中也叫“键”,是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别。
一.索引分类
B-Tree索引:
优点:
限制:
哈希索引:
哈希索引基于哈希表实现,只有精确匹配的索引所有列的查询才有效
优点:
限制:
二.索引的优点
最常见的是B-Tree索引,按照顺序存储数据,所以可以用来做ORDER BY和GROUP BY操作。因为数据是有次序的,所以B-Tree也就会将相关的列值存储在一块。由于索引中存储了实际的列值,所以某些查询只使用索引就可以完成全部查询。
1.索引大大减少了服务器需要扫描的数据量
2.索引可以帮助服务器避免排序和临时表
3.索引可以将随机I/O变为顺序I/O.
三.高性能索引策略
1) 独立的列
独立的列是指索引列不能是表达式的一部分,也不能是函数的一部分
2)前缀索引和索引选择性
诀窍在于要选择足够长的索引以保证高的索引选择性,但是又不能太长(节约空间)。
3)多列索引
首先“把where条件里面的列都建上索引”是错误的。
如果在一个查询用使用两个单列索引,在老版本的MySQL中会导致全表扫描,在新版本中,查询可以使用多个单列索引,并将结果合并。
这种算法有三个变种:
索引合并策略更多的说明了索引建的很糟糕:
4)选择合适的索引列顺序
多列索引的顺序至关重要
有一个经验法则:当不需要考虑排序和分组时候,将选择性高的列放在前面通常是很好的。
5) 聚簇索引
聚簇索引不是一种单独的索引类型,而是一种数据存储方式,实际上,InnoDB聚簇索引在同一个结构中保存了B-Tree索引和数据行。当表有聚簇索引时候,它的数据行实际上放在索引的叶子页中。“聚簇”,表示数据行和键值紧凑的存储再一起。
优点:
缺点:
6)覆盖索引
如果一个索引包含(覆盖)了所有需要查询的字段的值,那么就是覆盖索引
覆盖索引必须要存储索引列的值,而哈希索引,空间索引,全文索引都不存储索引列的值,只有B-Tree可以
MySQL不能再索引中执行LIKE操作,这是底层API的限制,MySQL只能提取数据行的值而不是索引的值来比较。
为了利用覆盖索引,我们可以利用一种叫延迟关联的技巧
7) 使用索引扫描来做排序
参考资料:高性能MySQL第五章
标签:空间 group by 条件 size 临时表 重要 表达 高性能 范围查询
原文地址:http://www.cnblogs.com/fcyworld/p/6637599.html