为什么索引不适用于count(*)?

时间:2017-02-14 20:11:52

标签: mysql

我使用MySQL,为时已太晚,直到我意识到查询花了太长时间来响应所需的列作为索引。
我理解索引的工作方式,但我想知道索引是否可以以COUNT(*)或COUNT(col1)的方式实现,其中col1被索引,这与执行&#39一样快;哪里COL = 007' ? 我问这个是因为在我的应用程序中我经常需要进行计数查询。为了加快操作流程,需要减少响应。

1 个答案:

答案 0 :(得分:1)

您说您了解索引的工作方式。但我认为这也是聚合函数如何工作的问题。

让我们说你做了

SELECT count(col) FROM table;

它做什么?可能它会将该表中的每个col显示为 count ,而 count 会执行

counter++;

某处。这是一个相当快速的操作。

计数查询的速度取决于每行可以显示给计数功能的速度。 col 上的索引不会影响速度,因为无论如何都必须扫描 table 的每一行。索引只是一种比完整的表扫描更快地查找某些行的方法。

另一方面,快速查询如

SELECT count(col) FROM table WHERE col="rare value";

很快,因为

SELECT col FROM table WHERE col="rare value";

也很快。

我希望这对你有意义。否则,为什么不向我们提供更多详细信息,我们会尝试和实际查询?