更快地从DB获取一行或计算行数

时间:2010-04-23 12:16:00

标签: sql mysql

我想知道检索行数“计数”或使用限制检索只有1行的速度更快。目的是在给定某些Where条件时查看是否有任何行。

5 个答案:

答案 0 :(得分:5)

计数始终是一个昂贵的查询,因为它将进行全表扫描。您的要求对我来说并不是很清楚,但如果您只是想查看是否有任何数据,那么定期选择限制为1会更便宜。

答案 1 :(得分:5)

计数必须在物理上计算符合条件的所有行,这是不必要的工作,因为您不关心数字。

请使用EXISTS

答案 2 :(得分:0)

它认为这取决于您用于数据库的存储引擎......

Anywawy,测试是否有结果的好习惯是检查feth()函数的返回值!

答案 3 :(得分:0)

[我在这里使用Oracle作为示例,但是相同的概念通​​常全面适用。]

COUNT必须物理识别将返回的所有行。根据查询的复杂性,查询计划可能需要对查询的一个或多个表进行表扫描。你需要做EXPLAIN PLAN才能确定。

如果需要ORDER BY,则返回单行可能需要相同的处理。数据库不能只给你第一行

  1. 识别所有行并
  2. 行已经排序。
  3. 此外,根据返回的行数,ORDER BYSGA大小的复杂性,可能需要创建一个临时表(这会导致各种其他开销)

    如果没有ORDER BY,则单行应该更快,因为只要数据标识要返回的单行,就完成了。也就是说,从一次执行到下一次执行都不能保证按行以相同的顺序返回行,所以通常会涉及ORDER BY

答案 4 :(得分:-2)

检索行数count

的速度更快