다음은 테이블 스크립트입니다. 이 테이블에서 데이터에 액세스하는 것이 너무 느립니다.SQL Server 2005의 단일 테이블에서 데이터 액세스가 너무 느림
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Emails](
[id] [int] IDENTITY(1,1) NOT NULL,
[datecreated] [datetime] NULL CONSTRAINT [DF_Emails_datecreated]
DEFAULT (getdate()),
[UID] [nvarchar](250) COLLATE Latin1_General_CI_AS NULL,
[From] [nvarchar](100) COLLATE Latin1_General_CI_AS NULL,
[To] [nvarchar](100) COLLATE Latin1_General_CI_AS NULL,
[Subject] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
[Body] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
[HTML] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
[AttachmentCount] [int] NULL,
[Dated] [datetime] NULL
) ON [PRIMARY]
다음 쿼리는 데이터를 가져 오는 데 50 초가 걸립니다. 내가 선택에 HTML을바디 및 을 포함하는 경우
select id, datecreated, UID, [From], [To], Subject, AttachmentCount,
Dated from emails
는 시간 이벤트 나쁘다. 비 고유 비에
- ID Tabls 현재 180000+ 레코드가
클러스터 :
인덱스가 있습니다.
매월 100,000 개의 레코드가있을 수 있으므로 시간이 지날수록 느려질 것입니다.
두 개의 테이블로 데이터를 분할하면 문제가 해결됩니까? 다른 어떤 인덱스가 있어야합니까?
잠깐 기다려주세요. 180K 레코드를 검색하는 데 50 초가 걸립니까? 왜 180K 레코드를 검색하고 있습니까? 당신은 그들과 무엇을합니까? 왜 50 초가 길어? 인간이 화면에 180K 개의 레코드를 처리 할 수있는 것과는 다릅니다. 그래서 내 질문은 정말로 모든 레코드가 필요한지 아니면 예제에서 생략 한 WHERE 절이 있습니까? – MJB
where 절이 없기 때문에 인덱스가 작동한다고 생각하지 않습니다. 넌 테이블 전체 스캔을하고있어. – Blorgbeard
왜 테이블에서 모든 레코드를 검색해야합니까? restrcitive 절을 사용할 수 없습니까? – pcent