• Home
  • Contact

Kênh tư vấn

  • Beranda
  • Profil
  • Jurnal
    • 2000
    • 2001
    • 2002
      • 21 April
      • 22 April
      • 23 April
        • Senin
        • Selasa
        • Rabu
        • Kamis
      • 24 April
      • 25 April
    • 2003
    • 2004
  • Komentar
  • Kontak
Beranda » bài tập SQL » Mới nhất » SQL Server » Truy vấn SQL » Clustered Index trong Sql Server

Clustered Index trong Sql Server


Clustered index là loại index theo đó các bản ghi trong bảng được sắp thứ tự theo trường index. Khi bảng được tạo clustered index thì bản thân nó trở thành một cây index, với các node lá chứa khóa là các trường được index và cũng đồng thời chứa tất cả các trường còn lại của bảng. Vì các bản ghi chỉ có thể được sắp xếp trên cây index theo một thứ tự nhất định nên mỗi bảng chỉ có thể có tối đa một clustered index. Bạn tạo clustered index như sau:
CREATE CLUSTERED INDEX index_name ON dbo.Tblname(Colname1, Colname2...)
Khi bảng đã có clustered index thì các index khác (nonclustered) sẽ dùng khóa của trường clustered index làm con trỏ để trỏ về bản ghi tương ứng (nếu bảng không có clustered index thì một giá trị RID nội bộ được dùng).
Clustered index không đòi hỏi phải duy nhất (unique). Nhưng khi nó không duy nhất thì khóa index được gắn thêm một giá trị 4-byte ngẫu nhiên để đảm bảo các node index vẫn là duy nhất. Mục đích của việc này là để cho con trỏ trong các index khác luôn trỏ đến đến duy nhất một bản ghi, khi đó con trỏ sẽ bao gồm khóa index + chuỗi 4 byte được gắn thêm.
Việc gắn thêm như vậy làm tăng kích thước của clustered index cũng như các index khác, nên trong đa số tình huống thực tiễn bạn nên tạo clustered index là duy nhất. Thực tế, theo mặc định một clustered index duy nhất sẽ được tạo khi khai báo khóa chính.
Việc tìm kiếm theo trường có clustered index tối ưu hơn so với non-clustered index vì nó bỏ qua được bước bookmark lookup (do tất cả các trường dữ liệu đã có sẵn tại node index). Ta hãy so sánh hiệu năng của hai loại index thông qua một ví dụ: bảng Customer vốn đã có clustered index trên trường CustomerID; giờ ta hãy copy dữ liệu sang một bảng mới và tạo non-clustered index cho CustomerID; sau đó thực hiện cùng một câu lệnh trên hai bảng.

USE AdventureWorks
GO
SELECT *
INTO Sales.Customer_NC
FROM Sales.Customer
GO
CREATE INDEX Idx_CustomerID_NC ON Sales.Customer_NC(CustomerID)
GO
-- #1
SELECT CustomerID,CustomerType
FROM Sales.Customer WHERE CustomerID = 27684
 
-- #2
SELECT CustomerID,CustomerType
FROM Sales.Customer_NC WHERE CustomerID = 27684
Như phương án thực thi cho thấy, câu lệnh thứ nhất (có clustered index) chỉ có chi phí bằng một nửa so với câu lệnh thứ hai (nonclustered index), do câu lệnh thứ hai cần thêm thao tác bookmark lookup (RID lookup ở trong hình). Bạn có thể hình dung clustered index là một covering index với độ bao phủ là toàn bộ các cột trong bảng, nhưng không chiếm thêm không gian lưu trữ riêng cho index.
Cũng vì dữ liệu được lưu cùng với node index nên các lệnh tìm kiếm theo khoảng luôn được trợ giúp bởi clustered index. Trở lại hai bảng trong ví dụ trên:
SELECT CustomerID,CustomerType
FROM Sales.Customer WHERE CustomerID BETWEEN 20000 and 30000
 
SELECT CustomerID,CustomerType
FROM Sales.Customer_NC WHERE CustomerID BETWEEN 20000 and 30000
Hãy tạm bỏ qua dòng khuyến cáo (“Missing index…”) của SQL Server. Ta thấy là câu lệnh thứ nhất được thực hiện bằng index seek, trong khi câu lệnh thứ hai dẫn đến quét bảng (table scan) mặc dù trường cần tìm đã có index. Lý do là vì câu lệnh tìm kiếm theo khoảng như trên thường trả về nhiều bản ghi, nếu dùng index sẽ tạo ra nhiều thao tác bookmark lookup (mỗi bản ghi tìm được là một lần lookup), dẫn đến chi phí tăng cao. Trong trường hợp này nó còn vượt quá chi phí quét bảng. Vì thế bộ tối ưu hóa (Optimizer) khi đánh giá các phương án đã chọn cách quét bảng. Với clustered index thì thao tác nhảy thẳng đến từng node (index seek) luôn đủ để lấy được kết quả; vì index seek đã là tối ưu nên không có phương án nào khác cần xem xét.

Phiên bản áp dụng: Tất cả các phiên bản


Theo: sqlviet.com
Unknown
Add Comment
bài tập SQL, Mới nhất, SQL Server, Truy vấn SQL
Thứ Sáu, 6 tháng 4, 2012
Tweet
Clustered Index trong Sql Server Kênh tư vấn
Published: 2012-04-06T18:56:00-07:00
Title:Clustered Index trong Sql Server
Rating: 5 On 22 reviews

Related Articles

Không có nhận xét nào:

Đăng nhận xét

Newer Older Home

Entri Populer

  • Popular Posts
    Thêm,sửa,xóa,chấp nhận,hủy,thoát trong C# có CSDL
    ĐỀ BÀI Người ta muốn ứng dụng tin học để quản lý nhân sự của 1 doanh nghiệp. Là một lập trình viên, anh (chị) hãy thực hiện các yêu cầu sau ...
  • Popular Posts
    Bản quyền miễn phí Full Uninstall 2.10 trị giá $29,95
    Một vấn đề phổ biến chúng ta thường gặp phải khi gỡ bỏ phần mềm đó là sự tồn tại không cần thiết của các tập tin rác, các mục Registry,… Thậ...
  • Sửa file hosts để vào Facebook
    Sửa file hosts để vào Facebook Tìm kiếm mới nhất: cách vào facebook 2013 cachvaofacebook com vào facebook 2013 10 cach vao facebook 2013 cac...
  • Phân tích đoạn thơ “Nhớ khi giặc đánh giặc lùng.....Lạng nhớ sang Nhị Hà” trong bài thơ Việt Bắc của Tố Hữu
    Bài viết hay về Nhà thơ Tố Hữu +++++++++++++++++++++ Tìm hiểu về tác giả Tố Hữu Tìm hiểu bài " Việt Bắc" của Tố Hữu Bức tranh Tứ B...
  • Popular Posts
    Đáp án đề thi Cao đẵng môn Anh Khối A1,D1 năm 2012
    Bộ Giáo dục và Đào tạo trân trọng công bố đề thi và đáp án môn Toán Cao đẵng khối A,B,D năm 2012 Nội dung chi tiết trong file tải về Đề+Đáp ...
  • Bộ GD-ĐT công bố toàn cảnh đổi mới tuyển sinh năm 2012
    Chiều nay 24/2, Bộ GD-ĐT chính thức công bố những sửa đổi, bổ sung quy chế tuyển sinh hệ chính quy năm 2012. Theo đó, hàng loạt đổi mới đều ...
  • Khoa Quốc tế - ĐHQGHN tuyển 550 chỉ tiêu năm 2012
    Khoa Quốc tế - Đại học Quốc gia Hà Nội (ĐHQGHN) tuyển 550 chỉ tiêu thuộc các hệ đào tạo tiếng Anh, tiếng Nga, tiếng Pháp trong năm 2012. Kho...
  • Popular Posts
    Hot girl xinh đẹp nhất Sài thành
    Hotgirl Tâm Tít, hotgirl Midu, hotgirl Khả Ngân, hotgirl Sam, hotgirl Kelly là những hot girl xinh đẹp và tài năng trong làng showbiz wWw....
  • Popular Posts
    Thêm,sửa,xóa trong C#
    ĐỀ BÀI Người ta muốn ứng dụng tin học để quản lý nhân sự của 1 doanh nghiệp. Là một lập trình viên, anh (chị) hãy thực hiện các yêu cầu sau ...
  • CCleaner 3.21.1767 Final -Phần mềm Dọn rác và tối ưu miễn phí cho Windows
    CCleaner 3.21.1767 Final - Dọn rác và tối ưu miễn phí cho Windows CCleaner  được tạp chí PC World bầu chọn là tiện ích dọn dẹp hàng đầu hiện...
Copyright Mas Bintang | SJUTA IT