INDEX TRONG SQL LÀ GÌ

Trang công ty CÔNG NGHỆ index vào sql là gì, vì sao yêu cầu index database? thực hiện index trong sql query

Index (chỉ mục) trong SQL Server là các kết cấu dữ liệu đặc trưng được link với các bảng hoặc view góp tăng speed truy vấn. Squốc lộ Server hỗ trợ nhì nhiều loại index: clustered index cùng non-clustered index.quý khách hàng đang xem: Index trong sql là gì, tại vì sao đề xuất index database? áp dụng index trong sql query

Trong gợi ý này, các bạn sẽ tò mò phần nhiều thiết bị chúng ta cần phải biết về index trong SQL Server để có một chiến lược sinh sản index tốt nhằm mục tiêu về tối ưu hóa những truy nã vấn của người tiêu dùng.

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

Clustered Index vào Squốc lộ Server

Trong phần này, bạn sẽ tò mò về clustered index vào Squốc lộ Server cùng biện pháp quan niệm clustered index đến bảng.

Giới thiệu về Clustered Index trong SQL Server

Câu lệnh dưới đây tạo thành một bảng new có tên production.parts bao gồ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 chèn một trong những 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ì thế SQL Server tàng trữ các bản ghi của chính nó trong một cấu trúc có sản phẩm trường đoản cú được Điện thoại tư vấn là heap (đống).

lúc bạn truy vấn tài liệu từ bỏ bảng production.parts, trình buổi tối ưu hóa truy vấn đang quét toàn thể bảng nhằm xác định vị trí đúng mực.

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 xem ước chừng kế hoạch tiến hành vào Squốc lộ Server Management Studio, bạn cũng có thể thấy Squốc lộ Server vẫn giới thiệu chiến lược truy tìm vấn như sau:


*

Lưu ý: giúp thấy ước lượng planer triển khai trong Squốc lộ Server Management Studio, chúng ta nhấp chuột nút ít Display Estimated Execution Plan hoặc chọn truy nã vấn với dìm phím tắt Ctrl+L:
*

Vì bảng production.parts chỉ gồm năm bạn dạng ghi, cần truy vấn đã triển khai hết sức nhanh hao. Tuy nhiên, giả dụ bảng cất một số lượng bản ghi mập thì sẽ mất không ít thời gian cùng tài nguim nhằm kiếm tìm tìm tài liệu.

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

SQL Server có nhị các loại index là clustered index với non-clustered index.

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

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


*

Một clustered index tổ chức dữ liệu bằng phương pháp thực hiện một cấu tạo quan trọng đặc biệt được hotline là B-tree (balanced tree - cây cân bằng) có thể chấp nhận được tìm kiếm, chèn, cập nhật và xóa bản ghi bất kỳ cùng với thời hạn giống hệt.

Trong cấu trúc này, nút ít trên cùng của B-tree được gọi là nút gốc (root node). Các nút ít sinh sống cấp độ dưới thuộc được hotline là các nút lá (leaf nodes). Bất kỳ nút ít làm sao trung tâm những nút nơi bắt đầu cùng nút ít lá được call là nút trung gian.

Trong B-tree, nút cội và nút ít trung gian đựng những trang chỉ mục nhằm lữu trữ các chỉ mục của những bản 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 mỗi cấp của index được liên kết bởi cấu trúc khác call là list liên kết đôi.

Clustered Index và khóa thiết yếu trong Squốc lộ Server

lúc chúng ta chế tác bảng có khóa chính, SQL Server vẫn auto chế tạo một clustered index tương ứng dựa vào các cột tất cả trong khóa bao gồm.

Câu lệnh này tạo thành một bảng mới tên là production.part_prices gồm khóa bao gồm bao gồm nhì cột là: part_id và 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ư bạn thấy vào hình trên, SQL Server vẫn tự động hóa tạo nên một clustered index mang tên là PK__part_pri_xxxx mang đến bảng production.part_prices.

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

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

Tạo Clustered Index trong SQL Server

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

Câu lệnh sau đây chế tác một clustered index mang lại bảng production.parts:

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


*

SELECT part_id, part_nameFROM production.partsWHERE part_id = 5;

Cú pháp chế tạo ra clustered index trong SQL Server

Cú pháp chế tác clustered index vào SQL Server nlỗi sau:

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

Trước tiên, các bạn áp dụng mệnh đề CREATE CLUSTERED INDEX nhằm chế tạo ra clustered index.Thứ nhị, chỉ định và hướng dẫn thương hiệu của clustered index sau mệnh đề CREATE CLUSTERED INDEX.Thđọng bố, chỉ định và hướng dẫn lược vật cùng thương hiệu bảng mà bạn muốn tạo index.Cuối cùng, liệt kê một hoặc các cột tất cả trong index.

Xem thêm:

Non-clustered index trong Squốc lộ Server

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

Giới thiệu về non-clustered index trong Squốc lộ Server

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

Tương từ nhỏng 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 nó.

Một bảng có thể tất cả một hoặc nhiều non-clustered index cùng từng non-clustered index rất có thể gồm 1 hoặc nhiều cột của bảng.

Tấm hình sau đây minh họa cấu trúc non-clustered index:


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

Nếu bảng là một trong clustered table (bảng có clustered index), bé trỏ bản ghi là khóa của clustered index. Trong ngôi trường vừa lòng bảng không tồn tại clustered index, bé trỏ bạn dạng ghi trỏ mang đến phiên bản ghi của bảng.

Tạo non-clustered index vào SQL Server

Để chế tác một non-clustered index vào SQL Server, bạn 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 và hướng dẫn thương hiệu của index sau mệnh đề CREATE NONCLUSTERED INDEX. Lưu ý rằng từ khóa NONCLUSTERED là tùy chọn.Thđọng nhì, chỉ định thương hiệu bảng nhưng mà bạn có nhu cầu sinh sản index cùng list những cột của bảng đó làm cột khóa index.

lấy ví dụ về non-clustered index vào Squốc lộ Server

Chúng tôi vẫn áp dụng bảng sales.customers từ bỏ đại lý tài liệu mẫu nhằm minh họa.


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

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

Câu lệnh sau tìm kiếm tìm đều khách hàng gồm liên can sinh hoạt tỉnh thành Atwater:

SELECT customer_id, cityFROM sales.customersWHERE city = "Atwater";Nếu bạn coi ước tính chiến lược tiến hành, các bạn sẽ thấy trình về tối ưu hóa tầm nã vấn quét clustered index nhằm tìm kiếm những bản ghi. Điều này là vì bảng sales.customers không có index mang đến cột thành phố.


Để nâng cấp vận tốc của truy nã vấn này, chúng ta có thể chế tác một non-clustered index cho cột thành phố nlỗi sau:

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


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

Câu lệnh sau đây tìm kiếm kiếm khách hàng gồm họ là Berg và thương hiệu 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 tróc nã vấn quét clustered index nhằm tìm kiếm kiếm khách hàng bao gồm chúng ta là Berg cùng thương hiệu là Monika.

Để tăng vận tốc truy xuất tài liệu, bạn cũng có thể chế tạo ra một non-clustered index bao gồm cả nhì cột last_name với first_name nlỗi sau:

CREATE INDEX ix_customers_name ON sales.customers(last_name, first_name);Bây tiếng, trình buổi tối ưu hóa truy vấn sẽ áp dụng chỉ mục ix_customers_name nhằm tìm kiếm tìm người sử dụng.

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE last_name = "Berg" AND first_name = "Monika";
lúc các bạn chế tạo ra một non-clustered index bao hàm nhiều cột, thiết bị trường đoản cú của các cột vào chỉ mục là khôn xiết quan trọng. Quý khách hàng nên được sắp xếp các cột mà các bạn hay sử dụng để truy nã vấn tài liệu sinh sống đầu list cột.

Ví dụ: câu lệnh dưới đây search tìm quý khách hàng tất cả họ Albert. Vì cột last_name là cột trước tiên trong index, trình buổi 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 phương thức index seek để tra cứu kiếm:

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE last_name = "Albert";
Câu lệnh tiếp sau đây tra cứu kiếm khách hàng mang tên là Adam. Nó cũng tận dụng tối đa index ix_customer_name tuy vậy nó nên quét cục bộ index (index scan) nhằm tra cứu tìm, chậm rộng đối với áp dụng cách thức index seek để search tìm.

SELECT customer_id, first_name, last_nameFROM sales.customersWHERE first_name = "Adam";
Do kia, cách tốt nhất có thể là đặt những cột cơ mà các bạn thường xuyên sử dụng nhằm truy vấn dữ liệu làm việc đầu danh sách cột của index.

Đổi thương hiệu index trong SQL Server

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

Đổi tên index bằng cách áp dụng stored procedure sp_rename

sp_renamelà một trong những stored procedure hệ thống cho phép các bạn đổi tên ngẫu nhiên đối tượng người tiêu dùng làm sao vày người tiêu dùng sinh sản trong cơ sở tài liệu hiện tại bao hàm bảng, index với cột.

Câu lệnh thay tên một index nhỏng sau:

EXEC sp_rename index_name, new_index_name, N"INDEX";Hoặc chúng ta cũng có thể sử dụng các tđam mê số rõ ràng như sau: