Một chỉ mục trong SQL là gì?


439

Một chỉ mục trong SQL là gì? Bạn có thể giải thích hoặc tham khảo để hiểu rõ?

Tôi nên sử dụng một chỉ mục ở đâu?

Câu trả lời:


376

Một chỉ mục được sử dụng để tăng tốc độ tìm kiếm trong cơ sở dữ liệu. MySQL có một số tài liệu tốt về chủ đề này (cũng phù hợp với các máy chủ SQL khác): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Một chỉ mục có thể được sử dụng để tìm hiệu quả tất cả các hàng khớp với một số cột trong truy vấn của bạn và sau đó chỉ đi qua tập hợp con đó của bảng để tìm kết quả khớp chính xác. Nếu bạn không có chỉ mục trên bất kỳ cột nào trong WHEREmệnh đề, SQLmáy chủ phải đi qua toàn bộ bảng và kiểm tra từng hàng để xem nó có khớp không, có thể là hoạt động chậm trên các bảng lớn.

Chỉ mục cũng có thể là một UNIQUEchỉ mục, có nghĩa là bạn không thể có các giá trị trùng lặp trong cột đó hoặc PRIMARY KEYtrong một số công cụ lưu trữ xác định vị trí trong tệp cơ sở dữ liệu.

Trong MySQL, bạn có thể sử dụng EXPLAINtrước SELECTcâu lệnh của mình để xem liệu truy vấn của bạn có sử dụng bất kỳ chỉ mục nào không. Đây là một khởi đầu tốt để khắc phục sự cố hiệu suất. Đọc thêm tại đây: http://dev.mysql.com/doc/refman/5.0/en/explain.html


"Chỉ mục cũng có thể là một chỉ số ĐỘC ĐÁO ..." Chỉ cần xác nhận với bạn, điều đó có nghĩa là chỉ số có thể là KHÔNG ĐỘC ĐÁO? Tôi luôn nghĩ rằng nó ĐỘC ĐÁO. Tôi còn khá mới với SQL, xin lỗi tôi
Daniel Kurniadi

@DanielKurniadi Hầu hết các chỉ mục không phải là duy nhất. Tôi có thể có một cơ sở dữ liệu người dùng và muốn truy vấn cho tất cả mọi người sống ở Gothenburg. Một chỉ mục trên trường "thành phố" sẽ tăng tốc truy vấn của tôi. Nhưng có hơn 1 người dùng sống ở Gothenburg nên chỉ số phải là duy nhất.
Emil Vikström

174

Một chỉ mục được nhóm giống như nội dung của một danh bạ điện thoại. Bạn có thể mở cuốn sách tại 'Hilditch, David' và tìm tất cả thông tin cho tất cả các 'Hilditch' ngay cạnh nhau. Ở đây các khóa cho chỉ mục được nhóm là (họ, tên).

Điều này làm cho các chỉ mục được nhóm tuyệt vời để truy xuất nhiều dữ liệu dựa trên các truy vấn dựa trên phạm vi vì tất cả dữ liệu được đặt cạnh nhau.

Vì chỉ mục được phân cụm thực sự liên quan đến cách lưu trữ dữ liệu, nên chỉ có một trong số chúng có thể có trên mỗi bảng (mặc dù bạn có thể gian lận để mô phỏng nhiều chỉ mục được phân cụm).

Một chỉ mục không được phân cụm khác nhau ở chỗ bạn có thể có nhiều trong số chúng và sau đó chúng trỏ vào dữ liệu trong chỉ mục được phân cụm. Bạn có thể có ví dụ như một chỉ mục không được nhóm ở mặt sau của danh bạ điện thoại được khóa (thị trấn, địa chỉ)

Hãy tưởng tượng nếu bạn phải tìm kiếm trong danh bạ điện thoại cho tất cả những người sống ở 'Luân Đôn' - chỉ với chỉ mục được nhóm, bạn sẽ phải tìm kiếm mọi mục trong danh bạ vì phím trên chỉ mục được bật (tên cuối cùng, tên đầu tiên) và kết quả là những người sống ở London được phân tán ngẫu nhiên trong toàn bộ chỉ mục.

Nếu bạn có một chỉ mục không được nhóm trên (thị trấn) thì các truy vấn này có thể được thực hiện nhanh hơn nhiều.

Mong rằng sẽ giúp!


151

Một sự tương tự rất tốt là nghĩ về một chỉ mục cơ sở dữ liệu như một chỉ mục trong một cuốn sách. Nếu bạn có một cuốn sách liên quan đến các quốc gia và bạn đang tìm kiếm Ấn Độ, thì tại sao bạn lại lướt qua toàn bộ cuốn sách - tương đương với việc quét toàn bộ bảng theo thuật ngữ cơ sở dữ liệu - khi bạn chỉ có thể đi đến chỉ mục ở mặt sau của cuốn sách sẽ cho bạn biết các trang chính xác nơi bạn có thể tìm thấy thông tin về Ấn Độ. Tương tự, vì chỉ mục sách chứa số trang, chỉ mục cơ sở dữ liệu chứa con trỏ tới hàng chứa giá trị mà bạn đang tìm kiếm trong SQL của mình.

Thêm ở đây


2
Tôi ngưỡng mộ những người có kinh nghiệm giải thích mọi thứ bằng cách sử dụng "tương tự". +1
snr

82

Một chỉ mục được sử dụng để tăng tốc hiệu suất của các truy vấn. Nó thực hiện điều này bằng cách giảm số lượng trang dữ liệu cơ sở dữ liệu phải được truy cập / quét.

Trong SQL Server, một chỉ mục được nhóm xác định thứ tự vật lý của dữ liệu trong một bảng. Chỉ có thể có một chỉ mục được nhóm trên mỗi bảng (chỉ mục được nhóm là bảng). Tất cả các chỉ mục khác trên một bảng được gọi là không cụm.


49

Các chỉ mục là tất cả về việc tìm kiếm dữ liệu một cách nhanh chóng .

Các chỉ mục trong cơ sở dữ liệu tương tự như các chỉ mục mà bạn tìm thấy trong một cuốn sách. Nếu một cuốn sách có một chỉ mục và tôi yêu cầu bạn tìm một chương trong cuốn sách đó, bạn có thể nhanh chóng tìm thấy điều đó với sự trợ giúp của chỉ mục. Mặt khác, nếu cuốn sách không có mục lục, bạn sẽ phải dành nhiều thời gian hơn để tìm chương bằng cách xem mọi trang từ đầu đến cuối cuốn sách.

Theo cách tương tự, các chỉ mục trong cơ sở dữ liệu có thể giúp các truy vấn tìm dữ liệu nhanh chóng. Nếu bạn chưa quen với chỉ mục, các video sau đây, có thể rất hữu ích. Trên thực tế, tôi đã học được rất nhiều từ họ.

Chỉ số cơ bản về chỉ mục Các chỉ mục được phân
cụm và không phân cụm Các chỉ mục
duy nhất và không duy nhất Các
ưu điểm và nhược điểm của các chỉ mục


Đọc tất cả các câu trả lời làm tôi tự hỏi tại sao không lập chỉ mục tất cả mọi thứ. +1 để bao gồm các liên kết có chứa các nhược điểm.
Lakshay Garg

@LakshayGarg Đôi khi lập chỉ mục không cần thiết cũng có thể làm chậm thời gian thực hiện truy vấn, vì vậy chúng ta không nên thử lập chỉ mục mọi thứ. Giống như mọi thứ đều có ưu và nhược điểm riêng.
Gaurav Rajdeo

@LakshayGarg Gaurav Rajdeo nói đúng. Quá giống nhau: Bạn có thể muốn lập chỉ mục mỗi chương hoặc hình hoặc bảng trong một cuốn sách nhưng không phải mỗi đoạn, câu hoặc từ. Thông thường, đó sẽ là một quá mức cần thiết và sẽ dẫn đến các biến chứng không cần thiết. Hy vọng rằng điều này là đủ gần với hình ảnh được vẽ trong câu trả lời này.
colidyre

23

Vâng trong chỉ số chung là a B-tree. Có hai loại chỉ mục: phân cụm và không độc quyền.

Chỉ mục cụm tạo ra một thứ tự vật lý của các hàng (nó có thể chỉ là một và trong hầu hết các trường hợp, nó cũng là khóa chính - nếu bạn tạo khóa chính trên bảng, bạn cũng tạo chỉ mục cụm trên bảng này).

Nonclustered index cũng là một cây nhị phân nhưng nó không tạo ra một trật tự vật lý của hàng. Vì vậy, các nút lá của chỉ mục không chứa có chứa PK (nếu nó tồn tại) hoặc chỉ mục hàng.

Các chỉ mục được sử dụng để tăng tốc độ tìm kiếm. Bởi vì độ phức tạp là của O (log N). Chỉ số là chủ đề rất lớn và thú vị. Tôi có thể nói rằng việc tạo các chỉ mục trên cơ sở dữ liệu lớn đôi khi là một loại nghệ thuật.


6
nói chung, nó là một cây b chứ không phải là cây nhị phân.
Mitch Wheat

vì vậy, vì các chỉ mục sử dụng cây tự cân bằng, mỗi khi bạn thêm / xóa một hàng, nó sẽ tự cân bằng - làm cho việc chèn / xóa trở nên đắt hơn ... đúng không?
David Refaeli

20

INDEXES - để tìm dữ liệu dễ dàng

UNIQUE INDEX - giá trị trùng lặp không được phép

Cú pháp cho INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Cú pháp cho UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

13

Đầu tiên chúng ta cần hiểu cách truy vấn bình thường (không lập chỉ mục) chạy. Về cơ bản, nó đi qua từng hàng một và khi tìm thấy dữ liệu, nó sẽ trả về. Tham khảo hình ảnh sau đây. (Hình ảnh này đã được lấy từ video này .)

Không có chỉ mục Vì vậy, giả sử truy vấn là tìm 50, nó sẽ phải đọc 49 bản ghi dưới dạng tìm kiếm tuyến tính.

Tham khảo hình ảnh sau đây. (Hình ảnh này đã được lấy từ video này )

nhập mô tả hình ảnh ở đây

Khi chúng tôi áp dụng lập chỉ mục, truy vấn sẽ nhanh chóng tìm ra dữ liệu mà không cần đọc từng dữ liệu chỉ bằng cách loại bỏ một nửa dữ liệu trong mỗi lần truy cập giống như tìm kiếm nhị phân. Các chỉ mục mysql được lưu trữ dưới dạng cây B trong đó tất cả dữ liệu nằm trong nút lá.


12

INDEX là một kỹ thuật tối ưu hóa hiệu suất giúp tăng tốc quá trình truy xuất dữ liệu. Đó là cấu trúc dữ liệu liên tục được liên kết với Bảng (hoặc Chế độ xem) để tăng hiệu suất trong khi truy xuất dữ liệu từ bảng đó (hoặc Chế độ xem).

Tìm kiếm dựa trên chỉ mục được áp dụng đặc biệt hơn khi các truy vấn của bạn bao gồm bộ lọc WHERE. Mặt khác, tức là, một truy vấn không có bộ lọc WHERE sẽ chọn toàn bộ dữ liệu và xử lý. Tìm kiếm toàn bộ bảng mà không có INDEX được gọi là Quét bảng.

Bạn sẽ tìm thấy thông tin chính xác cho Sql-Index theo cách rõ ràng và đáng tin cậy: theo các liên kết sau:

  1. Để hiểu về cocnept-khôn ngoan: http : // ddnetnetologists.blogspot.in/2013/12/Microsoft-Query-Server-Training-Online-Learning-Class-INDEX-Overview-and-Optimifying.html
  2. Để hiểu rõ về triển khai: http://dotnetmasterities.blogspot.in/2013/12/Microsoft-Query-Server-Training-Online-Learning-Class-INDEX-Creation-Deletetion-Optimifying.html

6

Một chỉ mục được sử dụng cho một số lý do khác nhau. Lý do chính là để tăng tốc truy vấn để bạn có thể nhận được hàng hoặc sắp xếp hàng nhanh hơn. Một lý do khác là để xác định một khóa chính hoặc chỉ mục duy nhất sẽ đảm bảo rằng không có cột nào khác có cùng giá trị.


6

Nếu bạn đang sử dụng SQL Server, một trong những tài nguyên tốt nhất là Sách trực tuyến của riêng nó đi kèm với bản cài đặt! Đây là nơi đầu tiên tôi muốn đề cập đến cho bất kỳ chủ đề nào liên quan đến Máy chủ SQL.

Nếu nó thực tế "tôi nên làm điều này như thế nào?" loại câu hỏi, sau đó StackOverflow sẽ là một nơi tốt hơn để hỏi.

Ngoài ra, tôi đã không quay lại được một thời gian nhưng sqlservercentral.com từng là một trong những trang web liên quan đến SQL Server hàng đầu ngoài kia.


0

Một chỉ số là một on-disk structure associated with a table or view that speeds retrieval of rows from the table or view. Một chỉ mục chứa các khóa được xây dựng từ một hoặc nhiều cột trong bảng hoặc dạng xem. Các khóa này được lưu trữ trong một cấu trúc (cây B) cho phép SQL Server tìm hàng hoặc hàng được liên kết với các giá trị khóa một cách nhanh chóng và hiệu quả.

Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.

Nếu bạn định cấu hình KHÓA CHÍNH, Cơ sở dữ liệu sẽ tự động tạo một chỉ mục được nhóm, trừ khi đã tồn tại một chỉ mục được nhóm. Khi bạn cố gắng thực thi một ràng buộc PRIMARY KEY trên một bảng hiện có và một chỉ mục được nhóm đã tồn tại trên bảng đó, SQL Server sẽ thực thi khóa chính bằng cách sử dụng một chỉ mục không bao gồm.

Vui lòng tham khảo điều này để biết thêm thông tin về các chỉ mục (phân cụm và không phân cụm): https://docs.microsoft.com/en-us/sql/relational-database/indexes/clustered-and-nonclustered-indexes-descrip?view= máy chủ sql-ver15

Hi vọng điêu nay co ich!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.