Index trong sql là gì

  -  

Index (chỉ mục) vào SQL Server là những cấu trúc dữ liệu đặc trưng được links cùng với các bảng hoặc view góp tăng speed truy nã vấn. Squốc lộ Server cung ứng nhị loại index: clustered index với non-clustered index.

Bạn đang xem: Index trong sql là gì

Trong lí giải này, bạn sẽ khám phá đều đồ vật bạn cần phải biết về index vào Squốc lộ Server để sở hữu một kế hoạch tạo ra index tốt nhằm mục tiêu buổi tối ưu hóa những tầm nã vấn của người tiêu dùng.

Clustered Index vào Squốc lộ Server

Trong phần này, bạn sẽ khám phá về clustered index vào Squốc lộ Server cùng cách có mang clustered index cho bảng.

Giới thiệu về Clustered Index vào Squốc lộ Server

Câu lệnh tiếp sau đây chế tạo ra một bảng mới mang tên production.parts bao gồm nhị cột part_id và part_name:

CREATE TABLE production.parts( part_id INT NOT NULL, part_name VARCHAR(100));Và câu lệnh này cyếu một vài phiên bản ghi vào bảng production.parts:

INSERT INTO production.parts(part_id, part_name)VALUES (1,"Frame"), (2,"Head Tube"), (3,"Handlebar Grip"), (4,"Shoông xã Absorber"), (5,"Fork");Bảng production.parts không có khóa thiết yếu, cho nên Squốc lộ Server lưu trữ những phiên bản ghi của nó vào một cấu trúc tất cả máy từ được hotline là heap (đống).

Lúc các bạn truy vấn vấn dữ liệu từ bỏ bảng production.parts, trình buổi tối ưu hóa truy hỏi vấn sẽ quét toàn cục bảng để xác xác định trí đúng chuẩn.

Ví dụ: câu lệnh này tìm bản ghi tất cả id là 5.

SELECT part_id, part_nameFROM production.partsWHERE part_id = 5;Nếu bạn xem ước chừng planer thực hiện trong SQL Server Management Studio, bạn cũng có thể thấy SQL Server sẽ giới thiệu planer truy tìm vấn như sau:

*
Lưu ý: giúp xem ước tính chiến lược thực hiện vào SQL Server Management Studio, chúng ta nhấp chuột nút ít Display Estimated Execution Plan hoặc lựa chọn truy vấn với dìm phím tắt Ctrl+L:
*

Vì bảng production.parts chỉ gồm năm phiên bản ghi, đề xuất truy nã vấn sẽ triển khai khôn cùng nkhô hanh. Tuy nhiên, trường hợp bảng cất một số lượng bạn dạng ghi Khủng thì sẽ mất rất nhiều thời hạn và tài nguim nhằm tra cứu tìm tài liệu.

Để giải quyết vụ việc này, Squốc lộ Server cung ứng một cấu trúc chuyên được sự dụng nhằm tăng vận tốc truy nã xuất những bạn dạng ghi xuất phát từ một bảng được Gọi là index.

SQL Server tất cả nhị loại index là clustered index cùng non-clustered index.

Một clustered index lưu trữ các phiên bản ghi tài liệu trong một cấu trúc được bố trí dựa vào những giá trị khóa của chính nó. Mỗi bảng chỉ bao gồm một clustered index vì chưng những bạn dạng ghi tài liệu chỉ rất có thể được thu xếp theo một vật dụng tự. Bảng bao gồm clustered index được call là clustered table.

Tấm hình sau đây minch họa kết cấu của một clustered index:

*

Một clustered index tổ chức triển khai dữ liệu bằng cách áp dụng một cấu trúc quan trọng đặc biệt được call là B-tree (balanced tree - cây cân nặng bằng) cho phép kiếm tìm tìm, cnhát, update với xóa bản ghi ngẫu nhiên cùng với thời hạn giống hệt.

Trong kết cấu này, nút bên trên thuộc của B-tree được hotline là nút gốc (root node). Các nút ít ở Lever dưới cùng được điện thoại tư vấn là những nút lá (leaf nodes). Bất kỳ nút nào trọng điểm các nút nơi bắt đầu với nút ít lá được Gọi là nút ít trung gian.

Trong B-tree, nút ít gốc với nút trung gian chứa các trang chỉ mục để lữu trữ các chỉ mục của các bạn dạng ghi. Các nút ít lá chứa các trang dữ liệu (data pages) của bảng. Các trang trong những cấp của index được link bằng cấu trúc khác Hotline là list liên kết song.

Clustered Index và khóa chính trong SQL Server

Lúc bạn tạo ra bảng gồm khóa thiết yếu, Squốc lộ Server đang tự động hóa sinh sản một clustered index tương ứng dựa trên các cột bao gồm vào khóa bao gồm.

Câu lệnh này tạo nên một bảng bắt đầu tên là production.part_prices gồm khóa chính bao gồm hai cột là: part_id cùng valid_from.

CREATE TABLE production.part_prices( part_id int, valid_from date, price decimal(18,4) not null, PRIMARY KEY(part_id, valid_from) );

*
Nlỗi các bạn thấy trong hình bên trên, Squốc lộ Server vẫn tự động hóa sản xuất một clustered index mang tên là PK__part_pri_xxxx cho bảng production.part_prices.

Nếu các bạn thêm khóa chủ yếu vào trong 1 bảng đang có một clustered index, Squốc lộ Server vẫn đề nghị khóa chính thực hiện một non-clustered index. Câu lệnh này khái niệm khóa chính cho bảng production.parts:

ALTER TABLE production.partsĐịa Chỉ PRIMARY KEY(part_id);

Tạo Clustered Index vào SQL Server

Trong ngôi trường thích hợp một bảng không tồn tại khóa bao gồm (vấn đề này cực kỳ hiếm) chúng ta cũng có thể sử dụng câu lệnh CREATE CLUSTERED INDEX nhằm có mang một clustered index mang đến bảng.

Câu lệnh sau đây sinh sản một clustered index đến bảng production.parts:

CREATE CLUSTERED INDEX ix_parts_idON production.parts (part_id); Nếu bạn msinh sống nút Indexes bên dưới thương hiệu bảng, bạn sẽ thấy thương hiệu chỉ mục new ix_parts_id cùng với đẳng cấp Clustered.

*

Lúc thực hiện câu lệnh dưới đây, Squốc lộ Server duyệt qua chỉ mục (Tìm tìm clustered index) nhằm xác xác định trí phiên bản ghi, giải pháp này thì nhanh hao rộng quét toàn bộ bảng.

Xem thêm: Post Engagement Facebook Là Gì ? Vai Trò Của Engagement Facebook Trong Marketing

SELECT part_id, part_nameFROM production.partsWHERE part_id = 5;

*

Cú pháp sinh sản clustered index trong SQL Server

Cú pháp chế tác clustered index vào SQL Server nhỏng sau:

CREATE CLUSTERED INDEX index_nameON schema_name.table_name (column_list);Trong cú pháp này:

Đầu tiên, bạn thực hiện mệnh đề CREATE CLUSTERED INDEX nhằm sản xuất clustered index.Thứ đọng nhị, hướng đẫn thương hiệu của clustered index sau mệnh đề CREATE CLUSTERED INDEX.Thứ bố, hướng dẫn và chỉ định lược đồ và tên bảng mà bạn muốn tạo index.Cuối cùng, liệt kê một hoặc những cột gồm trong index.

Non-clustered index trong SQL Server

Trong phần này, bạn sẽ mày mò bí quyết áp dụng câu lệnh Squốc lộ Server CREATE INDEX để sinh sản các non-clustered index cho những bảng.

Giới thiệu về non-clustered index vào SQL Server

Non-clustered index là 1 trong những cấu tạo tài liệu góp nâng cấp vận tốc tầm nã xuất tài liệu từ bỏ các bảng. Không giống hệt như clustered index, non-clustered index bố trí với lưu trữ dữ liệu riêng biệt với các bạn dạng ghi trong bảng. Nó là 1 bạn dạng sao tài liệu của những cột được chọn xuất phát từ 1 bảng được links.

Tương trường đoản cú nhỏng clustered index, non-clustered index áp dụng cấu tạo cây B-Tree nhằm tổ chức dữ liệu của chính nó.

Một bảng rất có thể có một hoặc các non-clustered index và mỗi non-clustered index rất có thể bao gồm một hoặc những cột của bảng.

Hình ảnh sau đây minch họa cấu tạo non-clustered index:

*

Bên cạnh Việc lưu trữ những quý giá khóa index, các nút lá cũng tàng trữ các bé trỏ trỏ cho tới những phiên bản ghi gồm cất các quý giá khóa. Những con trỏ bản ghi này có cách gọi khác là những xác định sản phẩm (row locators).

Nếu bảng là 1 trong clustered table (bảng gồm clustered index), bé trỏ bạn dạng ghi là khóa của clustered index. Trong ngôi trường phù hợp bảng không có clustered index, con trỏ phiên bản ghi trỏ đến bạn dạng ghi của bảng.

Tạo non-clustered index trong SQL Server

Để tạo nên một non-clustered index vào Squốc lộ Server, chúng ta thực hiện câu lệnh CREATE INDEX:

CREATE INDEX index_nameON table_name(column_list);Trong cú pháp này:

Trước hết, chỉ định thương hiệu của index sau mệnh đề CREATE NONCLUSTERED INDEX. Lưu ý rằng từ bỏ khóa NONCLUSTERED là tùy chọn.Thứ đọng hai, chỉ định và hướng dẫn tên bảng mà lại bạn có nhu cầu tạo thành index cùng danh sách các cột của bảng kia làm cột khóa index.

ví dụ như về non-clustered index trong Squốc lộ Server

Chúng tôi đã sử dụng bảng sales.customers tự cơ sở dữ liệu chủng loại để minch họa.

*

Bảng sales.customers là 1 clustered table chính vì nó tất cả một khóa chủ yếu customer_id.

Tạo non-clustered index cho một cột trong Squốc lộ Server

Câu lệnh sau tìm kiếm đầy đủ người tiêu dùng có liên can ngơi nghỉ tỉnh thành Atwater:

SELECT customer_id, cityFROM sales.customersWHERE city = "Atwater";Nếu chúng ta coi khoảng chừng kế hoạch thực thi, các bạn sẽ thấy trình tối ưu hóa tầm nã vấn quét clustered index nhằm tra cứu các bản ghi. Vấn đề này là vì bảng sales.customers không tồn tại index mang lại cột đô thị.

*

Để cải thiện tốc độ của truy nã vấn này, chúng ta có thể chế tác một non-clustered index mang đến cột city như sau:

CREATE INDEX ix_customers_cityON sales.customers(city);Bây giờ đồng hồ, nếu bạn xem lại ước tính chiến lược tiến hành của tầm nã vấn bên trên, các bạn sẽ thấy rằng trình về tối ưu hóa truy vấn vấn sử dụng non-clustered index ix_customers_city nhỏng sau:

*

Tạo non-clustered index đến những cột trong SQL Server

Câu lệnh sau đây search tìm quý khách bao gồm họ là Berg với tên là Monika:

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE last_name = "Berg" AND first_name = "Monika";

*
Trình buổi tối ưu hóa truy hỏi vấn quét clustered index để kiếm tìm tìm quý khách hàng có họ là Berg với thương hiệu là Monika.

Để tăng tốc độ tầm nã xuất tài liệu, chúng ta có thể sinh sản một non-clustered index bao hàm cả nhị cột last_name cùng first_name nhỏng sau:

CREATE INDEX ix_customers_name ON sales.customers(last_name, first_name);Bây tiếng, trình về tối ưu hóa truy hỏi vấn sẽ áp dụng chỉ mục ix_customers_name để tìm kiếm quý khách hàng.

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE last_name = "Berg" AND first_name = "Monika";

*
lúc chúng ta tạo nên một non-clustered index bao hàm các cột, thiết bị trường đoản cú của những cột trong chỉ mục là vô cùng quan trọng đặc biệt. Quý Khách nên được sắp xếp những cột cơ mà các bạn thường sử dụng để truy vấn dữ liệu sống đầu danh sách cột.

Ví dụ: câu lệnh sau đây tìm kiếm kiếm quý khách gồm chúng ta Albert. Vì cột last_name là cột trước tiên trong index, trình tối ưu hóa truy nã vấn hoàn toàn có thể tận dụng tối đa index với sử dụng cách tiến hành index seek để tìm kiếm kiếm:

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE last_name = "Albert";

*
Câu lệnh tiếp sau đây search tìm khách hàng có tên là Adam. Nó cũng tận dụng tối đa index ix_customer_name tuy thế nó bắt buộc quét toàn bộ index (index scan) để tra cứu kiếm, chậm chạp rộng đối với áp dụng cách tiến hành index seek để tìm kiếm kiếm.

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE first_name = "Adam";

*
Do đó, bí quyết rất tốt là đặt các cột mà lại các bạn thường xuyên sử dụng nhằm truy vấn tài liệu sinh sống đầu danh sách cột của index.

Đổi thương hiệu index vào Squốc lộ Server

Trong phần này, các bạn sẽ mày mò biện pháp đổi tên index bằng phương pháp sử dụng stored procedure khối hệ thống sp_rename với Squốc lộ Server Management Studio.

Xem thêm: Tài Liệu Tiếng Việt Sử Dụng Ollydbg Là Gì, Ollydbg Là Gì

Đổi thương hiệu index bằng phương pháp sử dụng stored procedure sp_rename

sp_renamelà một stored procedure khối hệ thống cho phép bạn đổi tên ngẫu nhiên đối tượng người sử dụng như thế nào do người dùng tạo nên vào cửa hàng dữ liệu hiện nay bao hàm bảng, index với cột.

Câu lệnh thay tên một index nlỗi sau:

EXEC sp_rename index_name, new_index_name, N"INDEX";Hoặc bạn cũng có thể thực hiện các tyêu thích số rõ ràng như sau: