LIMIT 0,5使Query运行350次SLOWER

时间:2011-10-28 14:04:48

标签: mysql database

以下MySQL查询在 0.02秒

下完成
 SELECT
    *
 FROM
    `Table1`
 WHERE
    `col1`     = '43532' AND
    `col2`     = 'N'
 ORDER BY col3 DESC 

但是,如果我在其末尾添加LIMIT 0, 5,则会在 7秒内完成

 SELECT
    *
 FROM
    `Table1`
 WHERE
    `col1`     = '43532' AND
    `col2`     = 'N'
 ORDER BY col3 DESC 
 LIMIT 0, 5

即使查询返回空结果集,也会发生这种情况。

为什么添加LIMIT 0, 5会导致这个简单的查询慢350倍?我需要能够为分页原因限制结果,所以我该如何解决这个问题呢?

编辑:

没有限制,EXPLAIN说:

id  select_type table   type    possible_keys   key     key_len   ref     rows  Extra
1   SIMPLE      Table1  ref     col1,col2       col1    5         const   2441  Using where; Using filesort

WITH LIMIT,EXPLAIN说:

id  select_type table   type    possible_keys   key   key_len   ref   rows  Extra
1   SIMPLE      Table1  index   col1,col2       col3  5         NULL  1050  Using where

2 个答案:

答案 0 :(得分:0)

限制开始,保证金取决于数据库引擎的计算。 对于分页,不要每5行击中DB,最好是,你带500条记录 前端,然后通过javascript来迎合那里,因为每接下500条记录都会被DB接受。

答案 1 :(得分:0)

问题是该限制导致MySQL首先对查询进行排序,强制它对整个集合进行排序,然后对其进行过滤,而不是使用索引。

有指令告诉MySQL要使用哪个索引,但最好在col1,col2和col3上创建组合索引。 MySQL应该使用该索引进行过滤和排序。如果col3是该索引中的第一列或最后一列,您应该尝试查看查询是否更快。