我只需要知道查询是否返回记录。
当然我可以这样做:
SELECT COUNT(*) FROM tbl WHERE conds;
但是这会返回确切的行数(当然),我不需要这个开销。
所以我想到了这个问题:
SELECT COUNT(*) FROM (SELECT id FROM tbl WHERE conds LIMIT 1) as t1
将内部查询限制为1。
这更快吗?或者考虑到我正在做一个子查询,它取消了LIMIT 1
的好处?
注意:对于每个问自己的人,我都不能将LIMIT 1
应用于第一个查询,因为它不起作用
答案 0 :(得分:7)
第二个查询中的内部选择是多余的 如果您只想检查至少一行: -
SELECT 1 FROM tbl // return 1
WHERE conds // depends on your index and query
ORDER BY NULL // avoid file-sort
LIMIT 1; // minimum row
答案 1 :(得分:3)
为什么不呢:
SELECT 1 FROM tbl WHERE conds LIMIT 1
答案 2 :(得分:0)
你可以这样做:
SELECT 1 WHERE EXISTS(SELECT id FROM tbl WHERE CONDITION)
或类似的东西:
SELECT 1 WHERE EXISTS (SELECT id FROM tbl WHERE id IN( 1000, 1001))