Mysql 此字段是否需要索引?

Mysql 此字段是否需要索引?,mysql,indexing,Mysql,Indexing,我目前有一个汇总表来跟踪我的用户的帖子数量,我在该表上运行select来按数量对它们进行排序,例如WHERE count>10。现在我知道在WHERE子句中使用的列上有一个索引可以加快速度,但由于这些字段也会经常更新,索引会提供更好的性能还是更差的性能?索引通常会提供更好的读取性能,但插入、更新和删除性能稍差。通常,根据索引的宽度和表中已经存在的索引的数量,折衷是值得的。在您的情况下,我敢打赌,使用索引后的总体性能(读写)仍将比不使用索引时好得多,但您需要运行测试才能确定。它将提高读性能并恶化写

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

索引通常会提供更好的读取性能,但插入、更新和删除性能稍差。通常,根据索引的宽度和表中已经存在的索引的数量,折衷是值得的。在您的情况下,我敢打赌,使用索引后的总体性能(读写)仍将比不使用索引时好得多,但您需要运行测试才能确定。

它将提高读性能并恶化写性能。如果表是MyISAM,并且有很多人在短时间内发布,您可能会遇到MySQL等待锁定的问题,最终导致崩溃。

如果不尝试,就无法真正了解这一点。很大程度上取决于读写比、存储引擎、磁盘吞吐量、各种MySQL调优参数等。您必须设置一个类似于生产的模拟,并在前后运行。

我认为添加索引后,写性能不太可能成为严重问题


但是请注意,如果索引没有足够的选择性,那么无论如何也不会使用它。例如,如果超过10%的用户拥有
count>10
,最快的查询计划可能是不使用索引,只扫描整个表。

如果您有类似的查询

SELECT count(*) as rowcount
FROM table1
GROUP BY name
然后,您不能将索引放在计数上,您需要将索引放在
group by
字段上

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

那么,在该查询中添加索引可能会加快查询速度,但也可能没有任何区别:

SELECT id, `count`
FROM table1
WHERE `count` > 10
count
上的索引是否会加快查询速度实际上取决于满足
where
子句的行的百分比。如果超过30%,MySQL(或任何SQL)将拒绝使用索引。
它只会固执地坚持做一个完整的表格扫描。(即读取所有行)
这是因为使用索引需要读取2个文件(1个索引文件,然后是包含实际数据的实际表文件)。
如果您选择了很大比例的行,那么读取额外的索引文件是不值得的,只按顺序读取所有行会更快

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

了解您的数据

使用
explain select
将告诉您MySQL有哪些可用的索引,它选择了哪一个,以及(某种程度上/某种程度上)为什么


请参阅:

概括地说:在WHERE子句中使用的列上具有索引将提供更快的读取性能。唯一的问题是对索引的额外写入。我怀疑这不会是个问题。