MySQL是否有一种方法可以从COUNT(*)
表中找到一个数字大于x
的表,它会在那里停止计数?基本上,我只想知道从查询返回的记录数是多少还是少于一个特定的数字。如果它超过这个数字,我真的不在乎有多少行,如果它少了,请告诉我计数。
我能够像这样捏造它:
-- let x be 100
SELECT COUNT(*) FROM (
SELECT `id` FROM `myTable`
WHERE myCriteria = 1
LIMIT 100
) AS temp
...但我想知道是否有一些方便的内置方式来做到这一点?
感谢您的建议,但我应该更清楚这个问题背后的原因。它从几个连接表中进行选择,每个表都有数千万条记录。使用索引条件运行COUNT(*)
仍需要大约80秒,运行没有索引的大约需要大约30分钟左右。它更多的是优化查询而不是获得正确的输出。
答案 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。