我想知道检索行数“计数”或使用限制检索只有1行的速度更快。目的是在给定某些Where条件时查看是否有任何行。
答案 0 :(得分:5)
计数始终是一个昂贵的查询,因为它将进行全表扫描。您的要求对我来说并不是很清楚,但如果您只是想查看是否有任何数据,那么定期选择限制为1会更便宜。
答案 1 :(得分:5)
计数必须在物理上计算符合条件的所有行,这是不必要的工作,因为您不关心数字。
请使用EXISTS。
答案 2 :(得分:0)
它认为这取决于您用于数据库的存储引擎......
Anywawy,测试是否有结果的好习惯是检查feth()函数的返回值!
答案 3 :(得分:0)
[我在这里使用Oracle作为示例,但是相同的概念通常全面适用。]
COUNT
必须物理识别将返回的所有行。根据查询的复杂性,查询计划可能需要对查询的一个或多个表进行表扫描。你需要做EXPLAIN PLAN
才能确定。
如果需要ORDER BY
,则返回单行可能需要相同的处理。数据库不能只给你第一行
此外,根据返回的行数,ORDER BY
和SGA
大小的复杂性,可能需要创建一个临时表(这会导致各种其他开销)
如果没有ORDER BY
,则单行应该更快,因为只要数据标识要返回的单行,就完成了。也就是说,从一次执行到下一次执行都不能保证按行以相同的顺序返回行,所以通常会涉及ORDER BY
。
答案 4 :(得分:-2)
检索行数count