Index trong sql là gì

Index (chỉ mục) trong Squốc lộ Server là các cấu tạo tài liệu quan trọng đặc biệt được liên kết cùng với các bảng hoặc view góp tăng tốc tầm nã vấn. SQL Server cung cấp hai các loại index: clustered index và non-clustered index.

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

Trong trả lời này, bạn sẽ tìm hiểu đầy đủ thiết bị các bạn cần phải biết về index vào SQL Server để có một chiến lược chế tạo ra index tốt nhằm mục đích về tối ưu hóa các truy vấn vấn của khách hàng.

Clustered Index vào Squốc lộ Server

Trong phần này, các bạn sẽ tìm hiểu về clustered index vào SQL Server cùng giải pháp tư tưởng 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 bắt đầu mang tên production.parts bao hàm nhị cột part_id với part_name:

CREATE TABLE production.parts( part_id INT NOT NULL, part_name VARCHAR(100));Và câu lệnh này ckém 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 chồng Absorber"), (5,"Fork");Bảng production.parts không tồn tại khóa chính, cho nên vì vậy Squốc lộ Server tàng trữ những bản ghi của nó vào một kết cấu gồm sản phẩm từ bỏ được Gọi là heap (đống).

lúc bạn truy nã vấn dữ liệu từ bảng production.parts, trình về tối ưu hóa truy vấn sẽ quét tổng thể bảng nhằm xác xác định trí đúng chuẩn.

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

SELECT part_id, part_nameFROM production.partsWHERE part_id = 5;Nếu chúng ta coi ước chừng chiến lược triển khai vào Squốc lộ Server Management Studio, chúng ta cũng có thể thấy Squốc lộ Server vẫn đưa ra kế hoạch tầm nã vấn như sau:

*
Lưu ý: để xem ước chừng kế hoạch triển khai vào Squốc lộ Server Management Studio, chúng ta bấm vào nút Display Estimated Execution Plan hoặc chọn tầm nã vấn với nhấn phím tắt Ctrl+L:
*

Vì bảng production.parts chỉ có năm phiên bản ghi, cần truy hỏi vấn sẽ xúc tiến vô cùng nhanh. Tuy nhiên, ví như bảng chứa một vài lượng bạn dạng ghi Khủng thì vẫn mất không ít thời gian với tài ngulặng nhằm tìm kiếm tài liệu.

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

Squốc lộ Server gồm nhì nhiều loại index là clustered index và non-clustered index.

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

Bức Ảnh dưới đây minch họa cấu tạo của một clustered index:

*

Một clustered index tổ chức triển khai tài liệu bằng phương pháp thực hiện một cấu tạo đặc biệt được Call là B-tree (balanced tree - cây cân nặng bằng) chất nhận được tìm kiếm, cnhát, cập nhật với xóa phiên bản ghi ngẫu nhiên cùng với thời hạn tương đồng.

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

Trong B-tree, nút nơi bắt đầu cùng nút trung gian chứa những trang chỉ mục để lữu trữ những chỉ mục của các bản ghi. Các nút lá chứa những trang tài liệu (data pages) của bảng. Các trang trong những cấp cho của index được link bởi kết cấu không giống Call là list links đôi.

Clustered Index với khóa chính vào Squốc lộ Server

khi chúng ta chế tạo bảng có khóa chủ yếu, Squốc lộ Server sẽ auto sản xuất một clustered index tương xứng dựa vào những cột tất cả trong khóa chính.

Câu lệnh này tạo ra một bảng new tên là production.part_prices bao gồm khóa thiết yếu bao hàm nhị cột là: part_id với 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) );

*
Nhỏng chúng ta thấy trong hình bên trên, SQL Server đang auto sản xuất một clustered index có tên là PK__part_pri_xxxx mang đến bảng production.part_prices.

Nếu chúng ta thêm khóa bao gồm vào một bảng đang có một clustered index, Squốc lộ Server đã bắt buộc khóa chính sử dụng một non-clustered index. Câu lệnh này định nghĩa khóa bao gồm mang lại bảng production.parts:

ALTER TABLE production.partsADD PRIMARY KEY(part_id);

Tạo Clustered Index vào SQL Server

Trong trường đúng theo một bảng không có khóa chính (điều này hết sức hiếm) bạn cũng có thể thực hiện câu lệnh CREATE CLUSTERED INDEX để có mang một clustered index mang đến bảng.

Câu lệnh dưới đây sinh sản một clustered index cho bảng production.parts:

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

*

Lúc triển khai câu lệnh dưới đây, Squốc lộ Server trông nom qua chỉ mục (Tìm kiếm clustered index) nhằm xác định vị trí bạn dạng ghi, phương pháp này thì nhanh hơn quét tổng thể bảng.

Xem thêm: 8 Video Hướng Dẫn Sử Dụng Galaxy Note 8 Mà Người Dùng Nên Biết

SELECT part_id, part_nameFROM production.partsWHERE part_id = 5;

*

Cú pháp chế tạo ra clustered index trong Squốc lộ Server

Cú pháp tạo clustered index vào Squốc lộ Server nhỏng sau:

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

Thứ nhất, các bạn áp dụng mệnh đề CREATE CLUSTERED INDEX để tạo ra clustered index.Thứ đọng nhì, hướng đẫn thương hiệu của clustered index sau mệnh đề CREATE CLUSTERED INDEX.Thứ đọng bố, chỉ định lược trang bị với tên bảng mà bạn có nhu cầu tạo ra index.Cuối thuộc, liệt kê một hoặc những cột tất cả trong index.

Non-clustered index trong Squốc lộ Server

Trong phần này, các bạn sẽ mày mò giải pháp sử dụng câu lệnh SQL Server CREATE INDEX để tạo thành những non-clustered index cho các bảng.

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

Non-clustered index là 1 trong cấu tạo tài liệu giúp nâng cấp vận tốc truy tìm xuất dữ liệu trường đoản cú những bảng. Không giống hệt như clustered index, non-clustered index sắp xếp và lưu trữ dữ liệu đơn nhất cùng với những bạn dạng ghi vào bảng. Nó là 1 bản sao tài liệu của các cột được chọn xuất phát từ một bảng được link.

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

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

Tấm hình dưới đây minh họa kết cấu non-clustered index:

*

Bên cạnh bài toán lưu trữ những cực hiếm khóa index, những nút lá cũng tàng trữ các con trỏ trỏ cho tới các phiên bản ghi tất cả chứa các quý giá khóa. Những con trỏ bạn dạng ghi này nói một cách khác là các định vị sản phẩm (row locators).

Nếu bảng là một trong clustered table (bảng gồm clustered index), bé trỏ bản ghi là khóa của clustered index. Trong trường hợp bảng không có clustered index, bé trỏ bản ghi trỏ cho bản ghi của bảng.

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

Để tạo một non-clustered index vào Squốc lộ Server, chúng ta áp dụng câu lệnh CREATE INDEX:

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

Trước tiên, chỉ định và hướng dẫn 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 nhì, chỉ định và hướng dẫn tên bảng mà bạn muốn chế tạo ra index cùng list các cột của bảng đó làm cột khóa index.

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

Chúng tôi vẫn thực hiện bảng sales.customers tự cửa hàng dữ liệu chủng loại để minh họa.

*

Bảng sales.customers là một trong clustered table chính vì nó bao gồm một khóa thiết yếu customer_id.

Tạo non-clustered index cho một cột vào SQL Server

Câu lệnh sau tìm kiếm rất nhiều quý khách có can dự làm việc thành phố Atwater:

SELECT customer_id, cityFROM sales.customersWHERE đô thị = "Atwater";Nếu các bạn xem ước lượng chiến lược thực hiện, bạn sẽ thấy trình buổi tối ưu hóa truy vấn vấn quét clustered index để tìm những phiên bản ghi. Vấn đề này là vì bảng sales.customers không có index cho cột đô thị.

*

Để nâng cao tốc độ của tróc nã vấn này, bạn có thể chế tạo ra một non-clustered index mang lại cột city như sau:

CREATE INDEX ix_customers_cityON sales.customers(city);Bây giờ, nếu khách hàng xem xét lại ước lượng chiến lược thực hiện của truy vấn trên, bạn sẽ thấy rằng trình buổi tối ưu hóa truy hỏi vấn áp dụng non-clustered index ix_customers_city nhỏng sau:

*

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

Câu lệnh tiếp sau đây tìm kiếm tìm quý khách có bọn 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 tối ưu hóa truy vấn quét clustered index để tìm tìm người tiêu dùng tất cả họ là Berg với thương hiệu là Monika.

Để tăng vận tốc truy vấn xuất dữ liệu, chúng ta có thể chế tác một non-clustered index bao hàm cả hai cột last_name cùng first_name như sau:

CREATE INDEX ix_customers_name ON sales.customers(last_name, first_name);Bây giờ, trình buổi tối ưu hóa truy tìm vấn đã thực hiện chỉ mục ix_customers_name để kiếm tìm tìm 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 ra một non-clustered index bao hàm các cột, sản phẩm công nghệ trường đoản cú của các cột trong chỉ mục là vô cùng quan trọng. Quý Khách nên đặt những cột mà lại các bạn thường xuyên sử dụng nhằm tầm nã vấn tài liệu nghỉ ngơi đầu list cột.

Ví dụ: câu lệnh dưới đây search tìm người sử dụng có bọn họ Albert. Vì cột last_name là cột thứ nhất trong index, trình về tối ưu hóa truy tìm vấn rất có thể tận dụng tối đa index và sử dụng cách làm index seek nhằm 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 tìm kiếm quý khách mang tên là Adam. Nó cũng tận dụng tối đa index ix_customer_name nhưng mà nó bắt buộc quét tổng thể index (index scan) để tìm kiếm kiếm, chậm rộng đối với thực hiện cách làm index seek nhằm kiếm tìm kiếm.

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

*
Do kia, cách rất tốt là đặt các cột mà các bạn hay thực hiện để tróc nã vấn tài liệu nghỉ ngơi đầu danh sách cột của index.

Đổi thương hiệu index vào SQL Server

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

Đổi thương hiệu index bằng phương pháp thực hiện stored procedure sp_rename

sp_renamelà một trong những stored procedure khối hệ thống có thể chấp nhận được các bạn thay tên bất kỳ đối tượng người tiêu dùng làm sao vị người tiêu dùng tạo nên trong cơ sở dữ liệu bây giờ bao gồm bảng, index cùng cột.

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

EXEC sp_rename index_name, new_index_name, N"INDEX";Hoặc chúng ta cũng có thể áp dụng các tmê say số ví dụ nhỏng sau:

Leave a Reply

Your email address will not be published. Required fields are marked *