首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定表上的索引是否过多?

如何确定表上的索引是否过多?
EN

Stack Overflow用户
提问于 2010-02-17 11:40:28
回答 5查看 1.2K关注 0票数 4

如何确定我的MySQL表上的索引是否过多?

对于一些需要大量访问的表,我已经在将被大量访问的列上添加了大约2-4个索引。但是我怎么才能知道他们是否弊大于利呢?

EN

回答 5

Stack Overflow用户

发布于 2010-02-17 12:07:21

请注意,只有在使用索引更新表时才会对性能产生影响,因为当表中的数据发生变化时,必须维护索引。如果仅从表中进行选择,则索引通常只能提高性能,而不会降低性能。显然,您需要去掉表中任何不使用的索引,因为它们不必要地浪费了磁盘空间,并且随着表随着时间的推移而发生变化,必须再次进行维护。

通常,您需要检查执行计划,以查看根据查询实际使用了哪些索引。在执行此操作之前,请确保收集统计数据以获得准确的结果。检查执行计划是很重要的,b/c即使你有一个列上的索引,优化器可能不会基于诸如列的基数等因素来选择它。在查询具有高度选择性的大型表上(例如,你有1M个用户,并且你的查询是where userid = 'x‘,这将返回1行),你会发现select的索引值得维护成本。小表通常不会从索引中获得太多好处,因为多次全表扫描比索引扫描更可取。这是因为,与直接读取少量数据相比,读取索引然后读取索引引用的数据块的成本会更高。同样,这些事情需要根据您特定的表和需求进行验证,所有这些都是通过查看执行计划来完成的。

如果您的查询适合这些类型的查询,则优先使用连接索引而不是单列索引。例如,如果where子句通常执行类似"where fname = 'jim‘and emp_lname = 'smith’的操作,则在fname和lname上创建一个连接索引,而不是在每个列上创建单独的索引。

票数 2
EN

Stack Overflow用户

发布于 2010-02-17 11:43:49

如果插入和更新很慢,可以通过一种方式来判断。

票数 1
EN

Stack Overflow用户

发布于 2010-02-17 11:48:14

这个问题有很多要素:

  1. 您的索引是否正在使用?
  2. 您的索引是否正在提高

的性能

回答这些问题取决于您对查询的控制。假设您有一个web应用程序,那么您可能对即将到来的查询有一个很好的了解。如果没有,请启用查询日志一段时间以查看发生了什么。

接下来,对每个查询运行一次解释,并记下使用了哪些索引来满足它们。如果有任何未使用的,那么您可能应该删除它们,以节省空间并插入惩罚。

接下来,您需要查看索引是否有帮助。基准测试是最准确的方法,但您可能希望在数据库的副本上执行此操作,而不是在实时生产副本上执行此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2278159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档