Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Lập chỉ mục hoạt động như thế nào

Lập chỉ mục làm gì?

Lập chỉ mục là cách để đưa một bảng không có thứ tự vào một thứ tự sẽ tối đa hóa hiệu quả của truy vấn trong khi tìm kiếm.

Khi một bảng không được lập chỉ mục, thứ tự của các hàng có thể sẽ không được phân biệt rõ ràng bởi truy vấn được tối ưu hóa theo bất kỳ cách nào và do đó truy vấn của bạn sẽ phải tìm kiếm tuyến tính qua các hàng. Nói cách khác, các truy vấn sẽ phải tìm kiếm qua từng hàng để tìm các hàng phù hợp với các điều kiện. Như bạn có thể tưởng tượng, điều này có thể mất nhiều thời gian. Xem qua từng hàng không hiệu quả lắm.

Ví dụ:bảng bên dưới đại diện cho một bảng trong một nguồn dữ liệu hư cấu, hoàn toàn không có thứ tự.

company_id đơn vị unit_cost
10 12 1,15
12 12 1,05
14 18 1.31
18 18 1,34
11 24 1,15
16 12 1.31
10 12 1,15
12 24 1.3
18 6 1,34
18 12 1,35
14 12 1,95
21 18 1,36
12 12 1,05
20 6 1.31
18 18 1,34
11 24 1,15
14 24 1,05

Nếu chúng tôi chạy truy vấn sau:

SELECT
	company_id,
	units,
	unit_cost
FROM
	index_test
WHERE
	company_id = 18

Cơ sở dữ liệu sẽ phải tìm kiếm qua tất cả 17 hàng theo thứ tự chúng xuất hiện trong bảng, từ trên xuống dưới, từng hàng một. Vì vậy, để tìm kiếm tất cả các phiên bản tiềm năng của company_id số 18, cơ sở dữ liệu phải xem qua toàn bộ bảng cho tất cả các lần xuất hiện của 18 trong company_id cột.

Việc này sẽ ngày càng tốn nhiều thời gian hơn khi kích thước của bàn tăng lên. Khi độ phức tạp của dữ liệu tăng lên, điều cuối cùng có thể xảy ra là một bảng có một tỷ hàng được nối với một bảng khác có một tỷ hàng; truy vấn bây giờ phải tìm kiếm qua số lượng hàng gấp đôi số lượng hàng tốn gấp đôi lượng thời gian.

Bạn có thể thấy điều này trở thành vấn đề như thế nào trong thế giới dữ liệu luôn bão hòa của chúng ta. Các bảng tăng kích thước và thời gian thực thi tìm kiếm tăng.

Truy vấn một bảng chưa lập chỉ mục, nếu được trình bày trực quan, sẽ trông giống như sau:

Việc lập chỉ mục làm là thiết lập cột mà bạn đang sử dụng các điều kiện tìm kiếm theo thứ tự được sắp xếp để hỗ trợ tối ưu hóa hiệu suất truy vấn.

Với một chỉ mục trên company_id , về cơ bản, bảng sẽ "trông" như thế này:

company_id đơn vị unit_cost
10 12 1,15
10 12 1,15
11 24 1,15
11 24 1,15
12 12 1,05
12 24 1.3
12 12 1,05
14 18 1.31
14 12 1,95
14 24 1,05
16 12 1.31
18 18 1,34
18 6 1,34
18 12 1,35
18 18 1,34
20 6 1.31
21 18 1,36

Bây giờ, cơ sở dữ liệu có thể tìm kiếm company_id đánh số 18 và trả về tất cả các cột được yêu cầu cho hàng đó rồi chuyển sang hàng tiếp theo. Nếu comapny_id của hàng tiếp theo số cũng là 18 thì nó sẽ trả về tất cả các cột được yêu cầu trong truy vấn. Nếu company_id của hàng tiếp theo là 20, truy vấn biết ngừng tìm kiếm và truy vấn sẽ kết thúc.

Lập chỉ mục hoạt động như thế nào?

Trong thực tế, bảng cơ sở dữ liệu không tự sắp xếp lại mỗi khi các điều kiện truy vấn thay đổi để tối ưu hóa hiệu suất truy vấn:điều đó sẽ không thực tế. Trong thực tế, điều xảy ra là chỉ mục khiến cơ sở dữ liệu tạo ra cấu trúc dữ liệu. Kiểu cấu trúc dữ liệu rất có thể là B-Tree. Mặc dù những ưu điểm của B-Tree là rất nhiều, nhưng ưu điểm chính cho mục đích của chúng tôi là nó có thể sắp xếp được. Khi cấu trúc dữ liệu được sắp xếp theo thứ tự, nó làm cho việc tìm kiếm của chúng tôi hiệu quả hơn vì những lý do rõ ràng mà chúng tôi đã chỉ ra ở trên.

Khi chỉ mục tạo cấu trúc dữ liệu trên một cột cụ thể, điều quan trọng cần lưu ý là không có cột nào khác được lưu trữ trong cấu trúc dữ liệu. Cấu trúc dữ liệu của chúng tôi cho bảng trên sẽ chỉ chứa company_id những con số. Đơn vị và unit_cost sẽ không được giữ trong cấu trúc dữ liệu.

Làm thế nào để Cơ sở dữ liệu biết Các trường Khác trong Bảng để Trả lại?

Các chỉ mục cơ sở dữ liệu cũng sẽ lưu trữ các con trỏ chỉ là thông tin tham chiếu cho vị trí của thông tin bổ sung trong bộ nhớ. Về cơ bản, chỉ mục chứa company_id và địa chỉ nhà của hàng cụ thể đó trên đĩa nhớ. Chỉ mục sẽ thực sự trông như thế này:

company_id con trỏ
10 _ 123
10 _ 129
11 _ 127
11 _ 138
12 _ 124
12 _ 130
12 _ 135
14 _ 125
14 _ 131
14 _ 133
16 _ 128
18 _ 126
18 _ 131
18 _ 132
18 _ 137
20 _ 136
21 _ 134

Với chỉ mục đó, truy vấn chỉ có thể tìm kiếm các hàng trong company_id cột có 18 và sau đó sử dụng con trỏ có thể đi vào bảng để tìm hàng cụ thể nơi con trỏ đó tồn tại. Sau đó, truy vấn có thể đi vào bảng để truy xuất các trường cho các cột được yêu cầu cho các hàng đáp ứng các điều kiện.

Nếu tìm kiếm được trình bày trực quan, nó sẽ giống như sau:

Tóm tắt

  • Lập chỉ mục thêm cấu trúc dữ liệu với các cột cho điều kiện tìm kiếm và một con trỏ
  • Con trỏ là địa chỉ trên đĩa nhớ của hàng với phần còn lại của thông tin
  • Cấu trúc dữ liệu chỉ mục được sắp xếp để tối ưu hóa hiệu quả truy vấn
  • Truy vấn tìm kiếm hàng cụ thể trong chỉ mục; chỉ mục đề cập đến con trỏ sẽ tìm thấy phần còn lại của thông tin.
  • Chỉ mục làm giảm số hàng mà truy vấn phải tìm kiếm từ 17 xuống 4.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm mẫu giản đồ đến liên kết lớp dữ liệu

  2. Khắc phục sự cố không thành công khi cố gắng tạo mô hình IMDB lớn

  3. Blockchain:Nó là gì, nó hoạt động như thế nào và nó có ý nghĩa gì đối với dữ liệu lớn

  4. Sử dụng các phiên bản được đặt tên? Kiểm tra kết nối DAC của bạn!

  5. Mục tiêu hàng, Phần 3:Chống tham gia