如何建立索引
浏览:4212次 出处信息
关于如何建立索引,及哪些情况适合使用索引,哪些情况不适合使用索引,各种书籍资料有很多。
但是最重要的原则是:实际测试。
实践是检验真理的唯一标准。建立索引的时候,应进行如下测试:
1 explain select语句,看看是否有使用到索引。
2 运行update和insert操作,看看建立索引的负效应是否在可接受范围。
3 务必在接近生产环境的数据规模下进行索引性能的测试。
第三点尤为重要。
因为在最近的项目优化过程中,发现:
在某个字段上建立了索引之后,如果是select返回30条记录,建立索引之后,select时间降到原来的1/6。提高很明显。
而在生产环境下,这个select需要返回的结果通常是上千(甚至上万的),建立索引之后,select的时间反而增加了快一倍。因此建立索引反而适得其反。
分析后觉得可能的原因如下:
1 该字段建立索引之后,基数并不高,也就是该字段的重复率较高,索引对性能的提升不明显。简单说,比如一个字段是:性别,只有男女两种情况,那建立索引完全没必要,反而降低了性能。
2 该select要返回的结果集很大(超过了1000条记录)。在这种情况下,mysql先查询索引,而后根据索引到表中取得记录,这个操作在需要取得的记录非常多的情况下,非常耗时。最终导致了:建立索引之后,select时间反而增加的情况。
这次的主要原因是2. 因为还进行了如下测试:如果该select语句只返回30条记录,建立索引之后,select时间为原来的1/6。
建立索引要注意的地方很多,最重要的原则还是:实际测试。
建议继续学习:
- 由浅入深探究mysql索引结构原理、性能分析与优化 (阅读:15773)
- 浅谈MySQL索引背后的数据结构及算法 (阅读:10688)
- 由浅入深理解索引的实现(2) (阅读:7096)
- HBase二级索引与Join (阅读:6405)
- 如何建立合适的索引? (阅读:6110)
- InnODB和MyISAM索引统计集合 (阅读:5814)
- mysql查询中利用索引的机制 (阅读:5925)
- Innodb 表和索引结构 (阅读:5583)
- MySQL索引背后的数据结构及算法原理 (阅读:5174)
- mysql索引浅析 (阅读:4748)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:MySQL常用维护管理工具
后一篇:mysql cache功能小记 >>
文章信息
- 作者:rethink 来源: 博客园-rethink log
- 标签: 索引
- 发布时间:2009-10-16 12:11:22
建议继续学习
近3天十大热文
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 全站换域名时利用nginx和javascri -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南
