mysql索引的学习笔记

来源:互联网 发布:node http 客户端ip 编辑:程序博客网 时间:2024/05/22 15:20
1、一般是B-Tree索引,B-Tree索引适用于全键值、键值范围、键前缀;
2、关于B-Tree的限制
a、如果不是最左列开始查找,则无法使用索引;
b、不能跳过索引的列,比如索引有三个列,使用第一个列和第三个列,第二个列没有使用,那么这个时候只使用了第一列的索引;
c、有范围查找的列,则该列的后续列,不能作为索引了;
3、索引命名一般,主键pk_开头,唯一索引uk_开头,一般的idx_开头;
4、索引的作用:
a、大大减少了服务器需要扫描的数据量;
b、索引可以帮助服务器避免排序和创建临时表;
c、索引可以将随机I/O变为顺序I/O;
5、三星系统评价索引:索引将相关记录放到一起则获得一星,索引中的顺序是查找的排列顺序一致则二星,索引中的列包含了查询所需的列则三星索引;
6、索引需要是独立的列,不能是表达式或者函数的参数;
7、索引的选择性,不重复的索引值(基数)与数据表记录总数的比值,字符串取前面的字符(left(column, 4);
8、多列索引,就是一个索引包含多个列,一般选择性高的列在最左边;
9、覆盖索引:一个索引包含所有需要查询的字段的值;
10、使用explain,验证查询语句的性能:
a、type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询至少达到range级别,最好能达到ref。
b、rows
这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。
c、Extra
Using filesort 表示 MySQL 会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。可能在内存或者磁盘上进行排序。MySQL 中无法利用索引完成的排序操作称为“文件排序”
Using temporary 表示 MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。