IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何建立索引

博客园-rethink log 2009-10-16 12:11:22 累计浏览 4,642 次
本机暂存

    关于如何建立索引,及哪些情况适合使用索引,哪些情况不适合使用索引,各种书籍资料有很多。

    但是最重要的原则是:实际测试。

    实践是检验真理的唯一标准。建立索引的时候,应进行如下测试:

    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。

    建立索引要注意的地方很多,最重要的原则还是:实际测试。

同分类推荐文章

  1. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)
  2. 硬件故障后数据文件大小不对故障处理—Oracle碎片扫描恢复 (2026-06-07 18:21:47)
  3. 如何在Hive SQL中构造临时表用于和其它的表做关联? (2026-05-29 20:07:00)

查看更多 数据库 文章 →

建议继续学习

  1. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,351)
  2. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,292)
  3. 如何查找消耗资源较大的SQL (累计阅读 15,149)
  4. Linux 性能监控、测试、优化工具 (累计阅读 12,968)
  5. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,628)
  6. 长连接(KeepAlive)在 http 连接中的性能影响 (累计阅读 8,718)
  7. 其实,文件也可以truncate (累计阅读 8,523)
  8. MariaDB常见问题FAQ (累计阅读 8,307)
  9. redis在大数据量下的压测表现 (累计阅读 8,258)
  10. 搜索引擎的特殊用法 (累计阅读 8,066)