如何阻止LIMIT减慢查询速度?

时间:2014-01-11 16:02:49

标签: mysql sql sql-limit

我创建了一个包含100k行的测试表。此查询的执行时间:

SELECT id FROM table

0.032s。如果我为索引为GROUP BY的整数列添加Normal,BTREE语句,则查询的执行时间为:

SELECT id FROM table GROUP BY indexedColumn

EXPLAIN输出:

id | select_type | table | type |    possible keys   | key  | key_len | ref |  rows  | Extra
 1      SIMPLE    [table]  All    [indexedColumnKey]   null    null    null   105416   Using temporary; Using filesort

0.073s。由于GROUP BY,执行时间加倍,但我认为这是正常的?我的问题是,为什么要在查询中添加LIMIT,如下所示:

SELECT id FROM table GROUP BY indexedColumn LIMIT 500

EXPLAIN输出:

id | select_type | table | type |      possible keys    |        key        | key_len | ref |  rows  | Extra
 1      SIMPLE    [table]  index    [indexedColumnKey]   [indexedColumnKey]      5      null   500     null

将执行时间增加到0.301s?这是一个超过4倍的减速。

我对SQL非常缺乏经验,所以这可能是完全正常的,但对我来说,限制返回的行数对我来说似乎是违反直觉的。

问题:

  1. 这是正常的吗?
  2. 有没有办法阻止LIMIT减慢查询速度?

1 个答案:

答案 0 :(得分:0)

查询SELECT id FROM table GROUP BY indexedColumn不使用索引。它在您的解释中显示。但是当你使用limit时,会使用索引。 此外,对于实验,您可以使用SQL_NO_CACHE SELECT SQL_NO_CACHE ....

禁用缓存