从表中计数,但在某个数字处停止计数

时间:2009-11-19 06:08:43

标签: mysql sql database count query-optimization

MySQL是否有一种方法可以从COUNT(*)表中找到一个数字大于x的表,它会在那里停止计数?基本上,我只想知道从查询返回的记录数是多少还是少于一个特定的数字。如果它超过这个数字,我真的不在乎有多少行,如果它少了,请告诉我计数。

我能够像这样捏造它:

-- let x be 100

SELECT COUNT(*) FROM (
    SELECT `id` FROM `myTable`
    WHERE myCriteria = 1
    LIMIT 100
) AS temp

...但我想知道是否有一些方便的内置方式来做到这一点?


感谢您的建议,但我应该更清楚这个问题背后的原因。它从几个连接表中进行选择,每个表都有数千万条记录。使用索引条件运行COUNT(*)仍需要大约80秒,运行没有索引的大约需要大约30分钟左右。它更多的是优化查询而不是获得正确的输出。

3 个答案:

答案 0 :(得分:7)

SELECT * FROM WhateverTable WHERE WhateverCriteria
LIMIT 100, 1

LIMIT 100,1返回第101条记录(如果有),否则不返回记录。您可以将上述查询用作EXIST子句中的子查询,如果有帮助的话。

答案 1 :(得分:1)

我什么都想不到。在我看来,你正在做的事情完全符合目的,而且SQL似乎并不会让你更轻松地更容易地做到这一点。

考虑一下:在设定算术的严格上下文中,您尝试做的事情没有意义。在数学上,答案是计算所有内容,然后将MIN()取为100,这就是你(实际上有充分理由)试图避免的。

答案 2 :(得分:0)

这有效:

select count(*) from ( select * from  stockinfo s limit 100 ) s

但是从我那里得到的更快(我能说出来):

select count(*) from stockinfo

返回5170965。