죄송합니다. 지금 질문을 확인했습니다 : 30,000,000 개 이상의 행을 포함하는 큰 테이블이 있습니다.이 테이블에 포함 된 행 수를 계산하는 빠르고 안정적인 방법이 필요했습니다.
좋은 접근 방식은 다음과 같습니다. http://blogs.msdn.com/b/martijnh/archive/2010/07/15/sql-server-how-to-quickly-retrieve-accurate-row-count-for-table.aspx
그러나 그것은 전체 테이블입니다. 내 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
)
5000ms 이하로 소비 시간을 줄일 수 있습니까?
SQL 실행 계획 : http://i.stack.imgur.com/hsYVb.jpg
색인에 대해 이러한 구조를 시도하십시오.
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
추신. 귀하의 테이블은 매우 간단하고 테스트 용 데이터를 쉽게 생성 할 수 있지만 로컬 SQL Server (SSD에서 실행) 만 있으며 결과는 어쨌든 관련이 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다