你应该总是在SELECT *之前做一个COUNT(*)来确定是否有任何行?

时间:2012-09-19 18:19:55

标签: mysql performance select count row

在MySQL中,总是最好先做一个COUNT(*)来确定你是否应该用SELECT *来实际获取行,或者最好只做SELECT *直接然后检查它是否返回任何行?

6 个答案:

答案 0 :(得分:1)

这取决于您是否需要该号码,尤其是mysql中有calc_found_rows,IIRC。查看文档。

答案 1 :(得分:1)

总是SELECT [field1, field2 | *] FROM.... The SELECT COUNT(*)只会膨胀您的代码,增加额外的传输和数据开销,而且通常是不可维护的。

答案 2 :(得分:1)

除非您锁定有问题的表格,否则执行select count(*)是没用的。考虑:

流程1:

SELECT COUNT(*) FROM T;

流程2:

INSERT INTO T

流程1:

...now doing something based on the obsolete count retrieved before...

当然,在服务器环境中锁定表格并不是一个好主意。

答案 3 :(得分:0)

表单是2个查询,后者是1个查询。每个查询都需要与数据库服务器通信。做数学。

答案 4 :(得分:0)

答案与许多此类问题一样 - “这取决于”。当你没有表上的索引时,你不应该做的就是执行这两个查询。一般来说,仅执行COUNT会浪费IO时间,因此,如果此操作可以帮助您在MOST情况下节省一些IO时间,那么它可能是一种选择。

答案 5 :(得分:0)

在某些情况下,某些db驱动程序实现可能不会返回返回记录本身的select语句的实际选定行的计数。在您选择实际数据之前需要知道结果记录集的精确大小时,预先发出的'count(*)'很有用。