2013-03-27 43 views
6

Gần đây tôi đã được đưa vào cơ sở dữ liệu tinh chỉnh. Tôi có một số ý tưởng về SQL Server và quyết định tạo ra một số chỉ mục.TẠO SQL Server INDEX 2008

giới thiệu này http://sqlserverplanet.com/ddl/create-index

Nhưng tôi không hiểu tại sao loại Index như INCLUDE khác, WITH tùy chọn này sẽ giúp. Tôi đã thử google nhưng không nhìn thấy một mô tả đơn giản khi sử dụng chúng.

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber 
ON dbo.Presidents (PresidentNumber) 
INCLUDE (President,YearsInOffice,RatingPoints) 
WHERE ElectoralVotes IS NOT NULL 

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber 
ON dbo.Presidents (PresidentNumber) 
WITH (DATA_COMPRESSION = ROW) 

CREATE NONCLUSTERED INDEX IX_NC_PresidentNumber 
ON dbo.Presidents (PresidentNumber) 
WITH (DATA_COMPRESSION = PAGE) 

Tôi nên sử dụng kịch bản nào ở trên? Họ sẽ tăng hiệu suất?

Trả lời

2

Tôi không thể nói với tùy chọn datacompression, nhưng tùy chọn Bao gồm chắc chắn có thể cải thiện hiệu suất. Nếu bạn chỉ chọn PresidentNumber và một hoặc nhiều cột President, YearsInOffice hoặc RatingPoints và ElectoralVotes không phải là rỗng, thì truy vấn của bạn sẽ nhận được các giá trị từ chính chỉ mục đó và không phải chạm vào bảng bên dưới. Nếu bảng của bạn có các cột bổ sung và bạn bao gồm một trong các cột đó trong truy vấn của bạn thì nó sẽ phải lấy các giá trị từ bảng cũng như chỉ mục.


Select top 20 PresidentNumber, President, YearsInOffice, RatingPoints 
From Presidents 
where ElectoralVotes IS NOT NULL 

Các truy vấn trên sẽ chỉ đọc từ IX_NC_PresidentNumber và không cần phải kéo dữ liệu từ bảng tổng thống vì tất cả các cột từ truy vấn được đưa vào chỉ số

Select top 20 PresidentNumber, President, YearsInOffice, PoliticalParty 
From Presidents 
where ElectoralVotes IS NOT NULL 

truy vấn này sẽ sử dụng chỉ số IX_NC_PresidentNumber và bảng Tổng thống cũng vì cột PoliticalParty trong truy vấn không được bao gồm trong chỉ mục.

Select PresidentNumber, President, YearsInOffice, RatingPoints 
From Presidents 
Where RatingPoints > 50 

Truy vấn này rất có thể sẽ thực hiện quét bảng vì mệnh đề where trong truy vấn so với mệnh đề where được sử dụng trong chỉ mục không khớp và không có giới hạn về hàng.

+0

Bạn có thể thêm truy vấn mẫu tại đây không. Nó sẽ dễ dàng giúp tôi suy nghĩ và hiểu :) – Billa

+0

Có vẻ ổn. Vì vậy, chúng ta cần phải thêm chỉ mục cho tất cả các cột trong câu lệnh SELECT để có được hiệu suất tốt? để tránh quét bảng. – Billa

+0

Không, bạn không cần thêm tất cả các cột vào chỉ mục để tránh quét bảng. Bạn cần có các chỉ mục trên các cột bạn sử dụng trong mệnh đề where để tránh quét bảng. Việc tăng hiệu suất bạn sẽ thấy từ việc có tất cả các cột trong chỉ mục là tương đối nhỏ vì chỉ mục bao gồm các con trỏ tới các hàng. Lợi ích lớn là có chỉ mục trên các cột bộ lọc. – BlackICE

4

Nén dữ liệu cũng sẽ giúp hiệu suất truy vấn của bạn, kể từ sau khi nén, khi bạn chạy truy vấn, ít trang/phạm vi sẽ được tải, vì I/O bị giảm, giảm I/O luôn là lựa chọn tốt.

Các vấn đề liên quan