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

Các chỉ mục MySQL - các phương pháp hay nhất là gì?

Bạn chắc chắn nên dành một chút thời gian đọc về lập chỉ mục, có rất nhiều bài viết về nó và điều quan trọng là phải hiểu những gì đang xảy ra.

Nói chung, một chỉ mục áp đặt một thứ tự trên các hàng của bảng.

Để đơn giản, hãy tưởng tượng một bảng chỉ là một tệp CSV lớn. Bất cứ khi nào một hàng được chèn, hàng đó sẽ được chèn vào ở cuối . Vì vậy, thứ tự "tự nhiên" của bảng chỉ là thứ tự mà các hàng đã được chèn vào.

Hãy tưởng tượng bạn đã tải tệp CSV đó lên trong một ứng dụng bảng tính rất thô sơ. Tất cả những gì bảng tính này làm là hiển thị dữ liệu và đánh số các hàng theo thứ tự tuần tự.

Bây giờ hãy tưởng tượng rằng bạn cần tìm tất cả các hàng có một số giá trị "M" trong cột thứ ba. Với những gì bạn có sẵn, bạn chỉ có một lựa chọn. Bạn quét bảng kiểm tra giá trị của cột thứ ba cho mỗi hàng. Nếu bạn có nhiều hàng, phương pháp này ("quét bảng") có thể mất nhiều thời gian!

Bây giờ, hãy tưởng tượng rằng ngoài bảng này, bạn còn có một chỉ mục. Chỉ mục cụ thể này là chỉ số của các giá trị trong cột thứ ba. Chỉ mục liệt kê tất cả các giá trị từ cột thứ ba, theo một số thứ tự có nghĩa (giả sử theo thứ tự bảng chữ cái) và đối với mỗi giá trị, cung cấp danh sách các số hàng nơi giá trị đó xuất hiện.

Bây giờ bạn có một chiến lược tốt để tìm tất cả các hàng có giá trị của cột thứ ba là "M". Ví dụ:bạn có thể thực hiện tìm kiếm nhị phân ! Trong khi quá trình quét bảng yêu cầu bạn tìm N hàng (với N là số hàng), thì tìm kiếm nhị phân chỉ yêu cầu bạn nhìn vào các mục nhập chỉ mục log-n, trong trường hợp xấu nhất. Chà, điều đó chắc chắn dễ dàng hơn rất nhiều!

Tất nhiên, nếu bạn có chỉ mục này và bạn đang thêm các hàng vào bảng (ở phần cuối, vì đó là cách bảng khái niệm của chúng tôi hoạt động), bạn cần cập nhật chỉ mục mỗi lần. Vì vậy, bạn làm được nhiều việc hơn một chút trong khi viết các hàng mới, nhưng bạn tiết kiệm được rất nhiều thời gian khi tìm kiếm thứ gì đó.

Vì vậy, nói chung, lập chỉ mục tạo ra sự cân bằng giữa hiệu quả đọc và hiệu quả ghi. Không có chỉ mục, việc chèn có thể diễn ra rất nhanh - công cụ cơ sở dữ liệu chỉ thêm một hàng vào bảng. Khi bạn thêm chỉ mục, công cụ phải cập nhật từng chỉ mục trong khi thực hiện chèn.

Mặt khác, việc đọc trở nên nhanh hơn rất nhiều.

Hy vọng rằng điều đó sẽ bao gồm hai câu hỏi đầu tiên của bạn (như những người khác đã trả lời - bạn cần phải tìm sự cân bằng phù hợp).

Kịch bản thứ ba của bạn phức tạp hơn một chút. Nếu bạn đang sử dụng LIKE, các công cụ lập chỉ mục thường sẽ giúp tăng tốc độ đọc của bạn lên đến "%" đầu tiên. Nói cách khác, nếu bạn đang CHỌN ĐÂU cột NHƯ 'foo% bar%', cơ sở dữ liệu sẽ sử dụng chỉ mục để tìm tất cả các hàng có cột bắt đầu bằng "foo" và sau đó cần quét tập hợp hàng trung gian đó để tìm tập hợp con có chứa "bar". SELECT ... WHERE cột LIKE '% bar%' không thể sử dụng chỉ mục. Tôi hy vọng bạn có thể hiểu tại sao.

Cuối cùng, bạn cần bắt đầu suy nghĩ về các chỉ mục trên nhiều cột. Khái niệm này giống nhau và hoạt động tương tự như nội dung LIKE - về cơ bản, nếu bạn có chỉ mục trên (a, b, c), công cụ sẽ tiếp tục sử dụng chỉ mục từ trái sang phải tốt nhất có thể. Vì vậy, một tìm kiếm trên cột a có thể sử dụng chỉ mục (a, b, c), cũng như tìm kiếm trên (a, b). Tuy nhiên, công cụ sẽ cần quét toàn bộ bảng nếu bạn đang tìm kiếm WHERE b =5 VÀ c =1)

Hy vọng rằng điều này sẽ giúp làm sáng tỏ một chút, nhưng tôi phải nhắc lại rằng tốt nhất bạn nên dành vài giờ để tìm kiếm những bài báo hay giải thích những điều này một cách chuyên sâu. Bạn cũng nên đọc tài liệu về máy chủ cơ sở dữ liệu cụ thể của mình. Cách các chỉ số được người lập kế hoạch truy vấn triển khai và sử dụng có thể rất khác nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn sử dụng mệnh đề WITH trong MySQL như thế nào?

  2. CodeIgniter:Không thể kết nối với máy chủ cơ sở dữ liệu của bạn bằng cách sử dụng cài đặt được cung cấp Thông báo lỗi

  3. NodeJS MySQL Dump

  4. Sự khác biệt giữa LIKE và =trong MYSQL?

  5. Xây dựng hệ thống bản tin với PHP và MySQL