我想知道什么会更快,以及使用一个或另一个查询的权衡是什么?
SELECT * FROM table WHERE somecolumn = 'something' LIMIT 999;
VS
SELECT * FROM table WHERE somecolumn = 'something';
现在,考虑到查询结果永远不会返回超过几百行,使用LIMIT 999
是否会对性能产生重大影响?
我正在调查此选项,因为在我的项目中,我会为用户提供某种选项来限制他喜欢的结果,并且他可以将限制为空以显示所有内容,因此它&# 39;我更容易离开LIMIT部分查询,然后只是更改数字。
现在,表格非常大,从数十万到数千万行不等。 确切的问题看起来像:
SELECT SUM(revenue) AS cost,
IF(ISNULL(headline) OR headline = '', 'undefined', headline
) AS headline
FROM `some_table`
WHERE ((date >= '2017-01-01')
AND (date <= '2017-12-31')
)
AND -- (sic)
GROUP BY `headline`
ORDER BY `cost` DESC
正如我之前所说,这个查询永远不会返回超过一百行。
答案 0 :(得分:1)
但是,如果 LIMIT
的存在可以更改优化程序的功能,那么然后可能会有显着差异。
LIMIT
都没有影响。LIMIT
会阻止ORDER BY
的消除。根据定义,子查询是一个不是有序集的集合。因此,LIMIT
是阻止优化移除ORDER BY
。WHERE
,GROUP BY
,和 ORDER BY
所需的所有列,则达到LIMIT
时,优化工具可以停止。对于GROUP BY
和ORDER BY
,其他情况会通过tmp表和排序,并且只能针对整个行执行LIMIT
。到目前为止,评论中提到了两个缓存。
LIMIT
。innodb_buffer_pool_size
)。当运行类似的(不一定是精确的)查询时,这可以避免磁盘I / O.见上面的第一句话。