1

在 MySQL 中,通常最好COUNT(*)先确定是否应该执行 SELECT * 来实际获取行,还是SELECT *直接执行然后检查它是否返回任何行更好?

4

6 回答 6

1

这取决于您是否需要该号码,但特别是在mysql有一个calc_found_rowsIIRC 时。查找文档。

于 2012-09-19T18:22:07.147 回答
1

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

于 2012-09-19T18:22:28.003 回答
1

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

过程1:

SELECT COUNT(*) FROM T;

过程2:

INSERT INTO T

过程1:

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

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

于 2012-09-19T18:26:43.570 回答
0

形式为2个查询,后者为1个查询。每个查询都需要与数据库服务器对话。算一算。

于 2012-09-19T18:23:29.260 回答
0

答案与许多此类问题一样-“视情况而定”。当您在表上没有索引时,您不应该执行这两个查询。一般而言,仅执行 COUNT 会浪费 IO 时间,因此如果此操作可以帮助您在大多数情况下节省花费在 IO 上的时间,那么它可能是一个选择。

于 2012-09-19T18:25:49.747 回答
0

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

于 2012-09-19T18:28:32.003 回答