极限变化对查询性能影响很大。为什么?

时间:2015-04-03 04:12:45

标签: mysql

我使用whereorder bylimit进行简单查询(where部分中没有过滤'#39;)

SELECT t.id FROM table t  WHERE ... and t.status in (2, 15) and ... order by t.upped desc LIMIT 36;

正在执行~1.35s,结果有26行。解释:

  • 类型:index
  • key:upped
  • key_len:9
  • 行:2445
  • 过滤:88.43
  • extra:using where

如果我将limit值更改为< = 26,则查询正在执行~200ms。解释:

  • 类型:index
  • key:upped
  • key_len:9
  • 行:1766
  • 已过滤:122.42
  • extra:using where

如果我将limit值更改为> = 40,则同一查询正在执行~200ms。解释:

  • 类型:范围
  • key:status
  • key_len:4
  • 行:2160
  • 过滤:100.00
  • extra:使用索引条件;用在哪里;使用filesort

正如我们所看到的,limit值的变化很小,对性能影响很大。如果指定limit从27到39(包括),则查询非常慢,否则 - 相对较快。几天前,这种奇怪的行为意外地开始了。可能是什么原因?

我使用innodb引擎,表中总共有大约248285行。 mysql的版本是5.6.23。我们有ssd。

0 个答案:

没有答案