我目前有一个汇总表来跟踪我的用户的帖子计数,并且我在该表上运行SELECTs来按计数对它们进行排序,例如WHERE count > 10。现在,我知道在WHERE子句中使用列的索引可以加快速度,但由于这些字段也会经常更新,所以索引会提供更好的性能还是更差的性能?
发布于 2011-09-29 06:11:01
如果您有这样的查询
SELECT count(*) as rowcount
FROM table1
GROUP BY name那么您不能将索引放在count上,而需要将索引放在group by字段上。
如果您有一个名为count的字段
然后,在此查询中添加索引可能会加快查询速度,也可能根本没有什么不同:
SELECT id, `count`
FROM table1
WHERE `count` > 10count上的索引是否会加快查询速度实际上取决于满足where子句的行的百分比。如果超过30%,MySQL (或任何SQL )将拒绝使用索引。
它只会顽固地坚持执行全表扫描。(即读取所有行)
这是因为使用索引需要读取2个文件(1个索引文件,然后是包含实际数据的实际表文件)。
如果选择了很大百分比的行,读取额外的索引文件是不值得的,只按顺序读取所有行会更快。
如果只有几行通过了集合,那么使用索引将大大加快的查询速度
了解您的data
使用explain select将告诉您MySQL有哪些索引可用,它选择了哪个索引,以及(某种/某种复杂的方式)原因。
发布于 2011-09-29 06:01:44
通常,索引提供了更好的读取性能,但代价是插入、更新和删除性能略有下降。通常,根据索引的宽度和表中已经存在的索引的数量,这种权衡是值得的。在您的情况下,我敢打赌,使用索引的整体性能(读取和写入)仍然会比没有索引的情况好很多,但您需要运行测试才能确定。
发布于 2011-09-29 06:02:30
它将提高读取性能并降低写入性能。如果表是MyISAM的,而你有很多人在短时间内发帖,你可能会遇到MySQL正在等待锁的问题,最终导致崩溃。
https://stackoverflow.com/questions/7590112
复制相似问题