如果您想知道COUNT(*)
> 0,那么您可以使用EXISTS
使查询更有效。如果我想知道COUNT(*)
> 1,有没有办法让查询更高效?SQL:使COUNT(*)> 1高效
(需要与SQL Server和Oracle兼容的。)
谢谢,杰米
编辑:
我试图改善的部分代码的性能。有一些行类似:
if (SQL('SELECT COUNT(*) FROM table WHERE a = b') > 0) then...
和
if (SQL('SELECT COUNT(*) FROM table WHERE a = b') > 1) then...
第一行是很容易切换到EXISTS
声明,但我可以让第二条线更有效率?从评论和我自己的想法,我有以下想法,他们中的任何一个会更有效率?
if (SQLRecordCount('SELECT TOP 2 1 FROM table WHERE a = b') > 1) then...
(我可以用ROWNUM
用于Oracle)。
if (SQL('SELECT 1 FROM table WHERE a = b HAVING COUNT(*) > 1') = 1) then...
下列不不会在SQL Server中工作:
SELECT COUNT(*) FROM (SELECT TOP 2 FROM table WHERE a = b)
但这与Oracle:
SELECT COUNT(*) FROM (SELECT 1 FROM table WHERE a = b AND ROWNUM < 3)
感谢您的你的帮助到目前为止。
我不知道这是否仅是一个MySQL特定优化,而是有你试过`COUNT(primaryKeyField)> 1`或`COUNT(1)> 1`看看是否更好地使用索引? – PatrikAkerstrand 2011-02-10 14:48:16
@Ardman - 我想这个问题是关于某些基数的,如果你说每个组有1,000行,并且在前两次匹配之后可以停止扫描,类似于'EXISTS'不需要'计算'所有匹配的行。 – 2011-02-10 14:51:01
我能想到SQL Server使用`TOP`和`CROSS APPLY`的具体方式。 – 2011-02-10 14:59:06