本文主要给大家介绍优化mysql索引需要注意哪些要点,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下优化mysql索引需要注意哪些要点吧。
一,头盘:
SQL语句的五大要素:
1,获得结果集所需访问的查询条件
2,定义结果集所需的查询条件
3,结果集的大小
4,获得结果集所涉及的表的数量
5,多少用户同时修改这些数据
二,主菜:索引的一些特性和优化建议
1,经常变的索引列放在最后,这样会降低变更成本
2,索引字段的顺序非常重要,如果排序前有范围查询就不能使用索引排序,如:
索引A(a,b.c)
select a,b,c from t where a=1 and b between d1 and d2 order by c;
这样就需要排序
索引B(a,c,b)
就不用排序
--备注:
一般来说会优先选择B不需要排序,因为一般来说一个事务每次查询的结果集都是很小的,会限定输出的结果集,这个时候不用排序就会很快,选择索引A时结果集要排序,如果结果集(满足条件的结果)很大的话,这样是会很慢的
3,当以下三个条件同时满足,过虑因子隐患可以会产生:
1),访问路径中没有排序
2),第一屏幕结果一建立就回应
3),不是所有的谓词字段都参与定义待扫描的索引片
4,使用短索引。如果对多列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。
例如,如果有一个CHAR(200) 列,如果在前10 个或20 个字符内,多数值是惟一的,
那么就不要对整个列进行索引。对前10 个或20 个字符进行索引能够节省大量索引空
间,也可能会使查询更快。较小的索引涉及的磁盘I/O 较少,较短的值比较起来更快。
更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此,MySQL
也可以在内存中容纳更多的值。这增加了找到行而不用读取索引中较多块的可能性。
(当然,应该利用一些常识。如仅用列值的第一个字符进行索引是不可能有多大好处的,因为这个索引中不会有许多不同的值)
5,物化结果集:是指执行必要的数据库访问来构建结果集(比如排序)
1)为了避免不必要的工作,数据库系统总是尽可能晚地去进行物化结果,如果数据库系统先物化结果集,那么在FETCH调用的时候,系统将从临时表中检索记录,而在数据更新的时候,并不会更新临时表中存放的结果集
2)一次FETCH调用物化一条记录
如果满足的条件:
(1)没有排序需求
(2)存在一个可以满足结果集的索引
3)提前物化
(1)一般来说有排序都要提前物化,结果集排序,就是只需要提取一条记录,也必须物化整个结果集
6,过滤因子隐患
过滤因子:被用来定义谓词的选择性:满足谓词条件的记录数占表行总数的比例,该值取决于列值的分布情况,当评估一个索引是否合适时,最差的情况的过滤因子比平时的过滤因子更重要
半宽索引:一个包含where子句中所有列是的索引,使用半宽索引时,只有检索到匹配条件时才会访问表,而这个访问是随机读
宽索引:一个包含了select 语句中所涉及的所有字段的索引,包括投影的字段和where子句中的字段,使用这种索引时,不需要读表
结论:宽索引的优势在于避免了返回的结果集的回表随时读
看完以上关于优化mysql索引需要注意哪些要点,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。