对不起伙计们,我现在只是检查问题:我有一个包含超过30,000,000行的大表。我需要一种快速可靠的方法来计算此表中包含的行数。
但 WHOLE 表格。我的SQL语句如下:
select COUNT(*)
from HistoryData
where Port = 6021
and RecvTime > '2015-04-13'
and RecvTime < '2015-04-14 15:00:00'
此查询的结果是18615883
我的表上有一个索引(RecvTime, Port
)。索引脚本是:
/****** Script Date: 04/14/2015 15:54:04 ******/
ALTER TABLE [dbo].[HistoryData]
ADD CONSTRAINT [PK_HistoryData] PRIMARY KEY CLUSTERED
(
[Port] ASC,
[RecvTime] ASC
)
我可以在5000毫秒或更短的时间内减少消耗时间吗?
答案 0 :(得分:3)
为索引尝试这样的结构
CREATE NONCLUSTERED INDEX [IX_HistoryData] ON [dbo].[HistoryData]
(
[Port] ASC,
[RecvTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
您的执行计划应如下请注意引用的
IX_HistoryData
而不是PK_HistoryData
PS。你的表非常简单,我可以很容易地创建测试数据,但我只有一个本地SQL Server(在SSD上运行),结果无论如何都不相关。