以下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
答案 0 :(得分:0)
限制开始,保证金取决于数据库引擎的计算。 对于分页,不要每5行击中DB,最好是,你带500条记录 前端,然后通过javascript来迎合那里,因为每接下500条记录都会被DB接受。
答案 1 :(得分:0)
问题是该限制导致MySQL首先对查询进行排序,强制它对整个集合进行排序,然后对其进行过滤,而不是使用索引。
有指令告诉MySQL要使用哪个索引,但最好在col1,col2和col3上创建组合索引。 MySQL应该使用该索引进行过滤和排序。如果col3是该索引中的第一列或最后一列,您应该尝试查看查询是否更快。