首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释MySQL索引

问解释MySQL索引
EN

Server Fault用户
提问于 2011-04-04 10:59:47
回答 3查看 154关注 0票数 0

在我探索MySQL及其高级特性的过程中,特别是在性能优化方面,我遇到了一些对于SQL性能改进极其重要的特性,我们中的人都知道它就是“索引”。

我继续进行了一些实验,发现,我可以改进我的数据库读取,并将写入功能从20次提高到100次,只需向最常用的列应用附加索引。

自然会提出一个问题,如果这样的性能改进是可行的,为什么不为每个数据库列建立索引,并且有2到100倍快的数据库操作呢?

显然,在默认情况下没有发生这种情况是有原因的。

那么,如何知道什么时候索引呢?索引的局限性是什么,如果我过多地使用索引,它会如何影响我的总体系统性能。如果使用太多,索引是否会影响我的数据库读写性能?

我使用InnoDB作为我的主要数据库引擎,我的系统运行perl + apache + mysql CPU : Intel(R) Xeon(R) CPU L5520 @2.27GHzRAM: 8192 MB

EN

回答 3

Server Fault用户

回答已采纳

发布于 2011-04-04 11:28:28

自然会有一个问题,如果这样的性能改进是可行的,为什么不为每个数据库列建立索引,并且有2到100倍快的数据库操作?

首先,索引并不能在所有情况下都起作用。如果查询编写得很糟糕,索引将无助于帮助。索引可能占用相当大的空间,通常比数据本身大很多倍,因此为每一列添加索引将是非常浪费的。

那么,如何知道什么时候索引呢?索引的局限性是什么,如果我过多地使用索引,它会如何影响我的总体系统性能。

查询确定哪些数据需要索引。EXPLAIN命令将帮助您更好地了解需要索引的内容,以及索引如何有效地帮助查询执行。

索引无助于糟糕的查询。例如,像select * from table where col like "%stuff%"或select * from table where col rlike "ing$"这样的查询不会因为额外的索引而有多大帮助。在这种情况下,优化查询要比索引更好。

首先调整您的查询。使用EXPLAIN并查看日志以进行慢速查询。一旦确认查询不能再调优,那么就开始添加索引。

票数 1
EN

Server Fault用户

发布于 2011-04-04 11:15:38

索引占用空间,如果您更新数据,则需要重新构建索引,这需要时间。

索引可以加快表中的搜索速度。不是所有的行动!

要了解所需的索引,需要了解应用程序,还需要了解RDBMS的工作方式。

例句:如果你有一张桌子上有人,而你的应用程序从不搜索具有特定鞋码的人,那么你很可能不需要一个鞋号索引。

在MySQL中,有一个用于记录慢速查询和不使用索引的查询的函数。这些可能有助于您帮助规划您的索引。

票数 1
EN

Server Fault用户

发布于 2011-04-04 14:30:48

除了上面所有的建议(这是很棒的),我想指出的是,任何看到大量写活动的表都会出现索引问题,因为索引过程将不断地运行,以跟上变化。

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

https://serverfault.com/questions/255357

复制
相关文章

相似问题

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