只是想知道你们中的任何一个人是否Count(1)过度使用过Count(*),如果性能有显着差异,或者这只是从过去几天带来的遗留习惯?
(具体数据库是SQL Server 2005.)
我注意到在Oracle中,查询
SELECT COUNT(*) FROM sometable;
Run Code Online (Sandbox Code Playgroud)
对于大型桌来说非常慢.它似乎是数据库,它实际上遍历每一行并一次递增一个计数器.我认为表中某处有一个计数器表有多少行.
因此,如果我想检查Oracle中表中的行数,那么最快的方法是什么?
我需要向数据库发送一个SQL查询,告诉我表中有多少行.我可以使用SELECT获取表中的所有行,然后对它们进行计数,但我不喜欢这样做.是否有其他方法可以将表中的行数询问SQL服务器?
我的查询如下;
SELECT COUNT(Id) FROM Table
Run Code Online (Sandbox Code Playgroud)
该表包含3300万条记录 - 它包含Id上的主键,没有其他索引.
查询需要30秒.
实际执行计划显示它使用聚簇索引扫描.
我们已经分析了该表,发现它没有使用此链接中显示的第一个查询进行分段:http://sqlserverpedia.com/wiki/Index_Maintenance.
关于为什么这个查询如此缓慢以及如何解决它的任何想法.
表定义:
CREATE TABLE [dbo].[DbConversation](
[ConversationID] [int] IDENTITY(1,1) NOT NULL,
[ConversationGroupID] [int] NOT NULL,
[InsideIP] [uniqueidentifier] NOT NULL,
[OutsideIP] [uniqueidentifier] NOT NULL,
[ServerPort] [int] NOT NULL,
[BytesOutbound] [bigint] NOT NULL,
[BytesInbound] [bigint] NOT NULL,
[ServerOutside] [bit] NOT NULL,
[LastFlowTime] [datetime] NOT NULL,
[LastClientPort] [int] NOT NULL,
[Protocol] [tinyint] NOT NULL,
[TypeOfService] [tinyint] NOT NULL,
CONSTRAINT [PK_Conversation_1] PRIMARY KEY CLUSTERED
(
[ConversationID] ASC
)WITH (PAD_INDEX = …Run Code Online (Sandbox Code Playgroud) 我正在寻找计算大型(1500万行)表中有多少行的最佳方法.select count(*) from table;根据我在此事上发现的一些较旧的帖子,天真的方式显然是O(n),例如http://osdir.com/ml/sqlite-users/2010-07/msg00437.html.
是否有一个恒定的时间机制来获取此信息,或者失败的是直接select count(*)查询的首选替代方案?
可能重复:
计算非常大的表中的确切行数的最快方法?
我使用什么查询来获取共享通用规范的行数.
示例:idpost = 3的行数