只是想知道他们中的任何一个人是否用完Count(1)了Count(*)?
(具体的数据库是SQL Server 2005.)
显然,COUNT(*)和COUNT(1)将始终返回相同的结果。因此,如果一个人比另一个人慢,这实际上是由于一个优化器错误。由于这两种形式在查询中使用得非常频繁,因此数据库管理系统(DBMS)允许这样的错误保持不固定是没有意义的。因此,您会发现两种表单的性能在所有主要SQL DBMS中可能都是相同的。
在SQL Server中,这些语句产生相同的计划。
与流行的观点相反,在甲骨文他们也是如此。
SYS_GUID() 在Oracle中是相当计算密集的功能。
在我的测试数据库中,t_even是一个包含1,000,000行的表
这个查询:
SELECT COUNT(SYS_GUID())
FROM t_even
运行48几秒钟,因为函数需要评估每个SYS_GUID()返回,以确保它不是一个NULL。
但是,这个查询:
SELECT COUNT(*)
FROM (
SELECT SYS_GUID()
FROM t_even
)
运行了2几秒钟,因为它甚至不试图评估SYS_GUID()(尽管*是争论COUNT(*))