首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此字段是否需要索引?

问此字段是否需要索引?
EN

Stack Overflow用户
提问于 2011-09-29 05:57:20
回答 5查看 58关注 0票数 0

我目前有一个汇总表来跟踪我的用户的帖子计数,并且我在该表上运行SELECTs来按计数对它们进行排序,例如WHERE count > 10。现在,我知道在WHERE子句中使用列的索引可以加快速度,但由于这些字段也会经常更新,所以索引会提供更好的性能还是更差的性能?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-29 06:11:01

如果您有这样的查询

代码语言:javascript
复制
SELECT count(*) as rowcount
FROM table1
GROUP BY name

那么您不能将索引放在count上,而需要将索引放在group by字段上。

如果您有一个名为count的字段

然后,在此查询中添加索引可能会加快查询速度,也可能根本没有什么不同:

代码语言:javascript
复制
SELECT id, `count`
FROM table1
WHERE `count` > 10

count上的索引是否会加快查询速度实际上取决于满足where子句的行的百分比。如果超过30%,MySQL (或任何SQL )将拒绝使用索引。

它只会顽固地坚持执行全表扫描。(即读取所有行)

这是因为使用索引需要读取2个文件(1个索引文件,然后是包含实际数据的实际表文件)。

如果选择了很大百分比的行,读取额外的索引文件是不值得的,只按顺序读取所有行会更快。

如果只有几行通过了集合,那么使用索引将大大加快的查询速度

了解您的data

使用explain select将告诉您MySQL有哪些索引可用,它选择了哪个索引,以及(某种/某种复杂的方式)原因。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/explain.html

票数 1
EN

Stack Overflow用户

发布于 2011-09-29 06:01:44

通常,索引提供了更好的读取性能,但代价是插入、更新和删除性能略有下降。通常,根据索引的宽度和表中已经存在的索引的数量,这种权衡是值得的。在您的情况下,我敢打赌,使用索引的整体性能(读取和写入)仍然会比没有索引的情况好很多,但您需要运行测试才能确定。

票数 0
EN

Stack Overflow用户

发布于 2011-09-29 06:02:30

它将提高读取性能并降低写入性能。如果表是MyISAM的,而你有很多人在短时间内发帖,你可能会遇到MySQL正在等待锁的问题,最终导致崩溃。

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

https://stackoverflow.com/questions/7590112

复制
相关文章

相似问题

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