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

Hiểu các chỉ mục trong MySQL:Phần thứ ba

Bài đăng trên blog này là phần thứ ba của loạt blog về chỉ mục trong MySQL . Trong phần thứ hai của loạt bài đăng trên blog về chỉ mục MySQL, chúng tôi đã đề cập đến các chỉ mục và công cụ lưu trữ, đồng thời đề cập đến một số cân nhắc CHÍNH LÀ CHÍNH. Cuộc thảo luận bao gồm cách đối sánh tiền tố cột, một số cân nhắc về chỉ mục FULLTEXT và cách bạn nên sử dụng chỉ mục B-Tree với ký tự đại diện và cách sử dụng ClusterControl để theo dõi hiệu suất truy vấn của bạn, sau đó, lập chỉ mục.

Trong bài đăng trên blog này, chúng ta sẽ đi sâu vào một số chi tiết hơn về các chỉ mục trong MySQL :chúng tôi sẽ đề cập đến các chỉ mục băm, số lượng chỉ mục, tính chọn lọc của chỉ mục, chúng tôi sẽ cho bạn biết các chi tiết thú vị về việc bao gồm các chỉ mục và chúng tôi cũng sẽ đi qua một số chiến lược lập chỉ mục. Và, tất nhiên, chúng tôi sẽ đề cập đến ClusterControl. Chúng ta bắt đầu nhé?

Hash Indexes trong MySQL

MySQL DBAs và các nhà phát triển xử lý MySQL cũng có một thủ thuật khác liên quan đến MySQL - chỉ mục băm cũng là một lựa chọn. Các chỉ mục băm thường được sử dụng trong công cụ MEMORY của MySQL - cũng như với hầu hết mọi thứ trong MySQL, các loại chỉ mục này có những mặt hạn chế riêng. Nhược điểm chính của các loại chỉ mục này là chúng chỉ được sử dụng để so sánh bình đẳng sử dụng các toán tử =hoặc <=> có nghĩa là chúng không thực sự hữu ích nếu bạn muốn tìm kiếm một phạm vi giá trị, nhưng ưu điểm chính là rằng việc tra cứu rất nhanh. Một vài nhược điểm khác bao gồm thực tế là các nhà phát triển không thể sử dụng bất kỳ tiền tố ngoài cùng bên trái nào của khóa để tìm các hàng (nếu bạn muốn làm điều đó, hãy sử dụng các chỉ mục B-Tree thay thế), thực tế là MySQL không thể xác định gần đúng có bao nhiêu hàng giữa hai giá trị - nếu chỉ mục băm đang được sử dụng, trình tối ưu hóa cũng không thể sử dụng chỉ mục băm để tăng tốc các hoạt động ORDER BY. Hãy nhớ rằng chỉ mục băm không phải là thứ duy nhất mà công cụ MEMORY hỗ trợ - công cụ MEMORY cũng có thể có chỉ mục B-Tree.

Bản số chỉ mục trong MySQL

Liên quan đến các chỉ mục MySQL, bạn cũng có thể nghe thấy một thuật ngữ khác xung quanh - thuật ngữ này được gọi là thẻ số chỉ mục. Theo thuật ngữ rất đơn giản, chỉ số thẻ số đề cập đến tính duy nhất của các giá trị được lưu trữ trong một cột sử dụng chỉ mục. Để xem số lượng chỉ mục của một chỉ mục cụ thể, bạn có thể chỉ cần chuyển đến tab Cấu trúc của phpMyAdmin và quan sát thông tin ở đó hoặc bạn cũng có thể thực hiện truy vấn SHOW INDEXES:

mysql> SHOW INDEXES FROM demo_table;
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| demo_table |          1 | demo     |            1 | demo        | A         |      494573 |     NULL | NULL   |      | BTREE      |         |               |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

Kết quả truy vấn SHOW INDEXES có thể nhìn thấy ở trên như bạn có thể thấy có rất nhiều trường, một trong số đó mô tả thẻ số chỉ mục:trường này trả về số lượng ước tính các giá trị duy nhất trong chỉ mục - cardinality càng cao, cơ hội mà trình tối ưu hóa truy vấn sử dụng chỉ mục để tra cứu càng lớn. Như đã nói, tính chất chỉ mục cũng có một người anh em - tên của anh ta là tính chọn lọc chỉ mục.

Tính chọn lọc chỉ mục trong MySQL

Độ chọn lọc của chỉ mục là số lượng các giá trị khác biệt liên quan đến số lượng bản ghi trong bảng. Nói một cách dễ hiểu, tính chọn lọc chỉ mục xác định mức độ chặt chẽ của chỉ mục cơ sở dữ liệu giúp MySQL thu hẹp tìm kiếm các giá trị. Độ chọn lọc chỉ mục lý tưởng là giá trị 1. Độ chọn lọc chỉ mục được tính bằng cách chia các giá trị riêng biệt trong bảng cho tổng số bản ghi, ví dụ:nếu bạn có 1.000.000 bản ghi trong bảng của mình, nhưng chỉ 100.000 bản ghi trong số đó là các giá trị riêng biệt , độ chọn lọc chỉ mục của bạn sẽ là 0,1. Nếu bạn có 10.000 bản ghi trong bảng của mình và 8.500 bản ghi trong số đó là các giá trị riêng biệt, độ chọn lọc chỉ mục của bạn sẽ là 0,85. Điều đó tốt hơn nhiều. Bạn sẽ có được điểm. Tính chọn lọc chỉ mục của bạn càng cao thì càng tốt.

Bao gồm các Chỉ mục trong MySQL

Chỉ mục bao trùm là một loại chỉ mục đặc biệt trong InnoDB. Khi một chỉ mục bao hàm được sử dụng, tất cả các trường bắt buộc cho một truy vấn đều được bao gồm hoặc “được bao phủ” bởi chỉ mục, nghĩa là bạn cũng có thể thu được lợi ích của việc chỉ đọc chỉ mục thay vì dữ liệu. Nếu không có gì khác giúp ích, một chỉ số bao trùm có thể là tấm vé để bạn cải thiện hiệu suất. Một số lợi ích của việc sử dụng các chỉ mục bao gồm:

  • Một trong những tình huống chính trong đó chỉ mục bao trùm có thể được sử dụng bao gồm truy vấn phục vụ mà không cần đọc I / O bổ sung trên những chiếc bàn lớn.

  • MySQL cũng có thể truy cập ít dữ liệu hơn do các mục nhập chỉ mục nhỏ hơn kích thước của hàng.

  • Hầu hết các công cụ lưu trữ đều lập chỉ mục bộ nhớ cache tốt hơn dữ liệu.

Tạo chỉ mục bao phủ trên một bảng khá đơn giản - chỉ cần che các trường được truy cập bởi các mệnh đề SELECT, WHERE và GROUP BY:

ALTER TABLE demo_table ADD INDEX index_name(column_1, column_2, column_3);

Hãy nhớ rằng khi xử lý các chỉ mục bao trùm, việc chọn đúng thứ tự các cột trong chỉ mục là rất quan trọng. Để các chỉ mục bao trùm của bạn có hiệu quả, hãy đặt các cột mà bạn sử dụng với mệnh đề WHERE trước, ORDER BY và GROUP BY tiếp theo và các cột được sử dụng với mệnh đề SELECT sau cùng.

Chiến lược Lập chỉ mục trong MySQL

Làm theo lời khuyên được đề cập trong ba phần này của các bài đăng blog về chỉ mục trong MySQL có thể cung cấp cho bạn một nền tảng thực sự tốt, nhưng cũng có một số chiến lược lập chỉ mục mà bạn có thể muốn sử dụng nếu muốn thực sự khai thác sức mạnh của các chỉ mục trong kiến ​​trúc MySQL của bạn. Để các chỉ mục của bạn tuân thủ các phương pháp hay nhất của MySQL, hãy xem xét:

  1. Cô lập cột mà bạn sử dụng chỉ mục - nói chung, MySQL không sử dụng chỉ mục nếu các cột đó được sử dụng trên không bị cô lập. Ví dụ:một truy vấn như vậy sẽ không sử dụng một chỉ mục vì nó không bị cô lập:

    SELECT demo_column FROM demo_table WHERE demo_id + 1 = 10;


    Tuy nhiên, một truy vấn như vậy sẽ:

    SELECT demo_column FROM demo_table WHERE demo_id = 10;

  2. Không sử dụng chỉ mục trên các cột mà bạn lập chỉ mục. Ví dụ:sử dụng một truy vấn như vậy sẽ không hiệu quả nhiều vì vậy tốt hơn hết bạn nên tránh các truy vấn như vậy nếu có thể:

    SELECT demo_column FROM demo_table WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(column_date) <= 10;

  3. Nếu bạn sử dụng truy vấn LIKE cùng với các cột được lập chỉ mục, hãy tránh đặt ký tự đại diện ở đầu truy vấn tìm kiếm vì theo cách đó MySQL cũng sẽ không sử dụng chỉ mục. Đó là thay vì viết các truy vấn như thế này:

    SELECT * FROM demo_table WHERE demo_column LIKE ‘%search query%’;


    Cân nhắc viết chúng như sau:

    SELECT * FROM demo_table WHERE demo_column LIKE ‘search_query%’;


    Truy vấn thứ hai tốt hơn vì MySQL biết cột bắt đầu bằng gì và có thể sử dụng các chỉ mục hiệu quả hơn. Cũng như mọi thứ, câu lệnh EXPLAIN có thể giúp ích rất nhiều nếu bạn muốn đảm bảo rằng các chỉ mục của mình thực sự được sử dụng bởi MySQL.

Sử dụng ClusterControl để Giữ cho Truy vấn của Bạn Thực hiện tốt

Nếu bạn muốn cải thiện hiệu suất MySQL của mình, lời khuyên ở trên sẽ giúp bạn đi đúng hướng. Tuy nhiên, nếu bạn cảm thấy rằng bạn cần một cái gì đó nhiều hơn, hãy xem xét ClusterControl cho MySQL. Một trong những điều mà ClusterControl có thể giúp bạn bao gồm quản lý hiệu suất - như đã được lưu ý trong các bài đăng trên blog trước, ClusterControl cũng có thể giúp bạn giữ cho các truy vấn của bạn luôn hoạt động tốt nhất trong khả năng của chúng - đó là bởi vì ClusterControl cũng bao gồm một truy vấn màn hình cho phép bạn theo dõi hiệu suất của các truy vấn của mình, xem các truy vấn chạy chậm, chạy lâu và cũng có thể truy vấn các trường hợp ngoại lệ để cảnh báo bạn về những tắc nghẽn có thể xảy ra trong hiệu suất cơ sở dữ liệu của bạn trước khi bạn có thể tự nhận thấy chúng:

Bạn thậm chí có thể lọc các truy vấn của mình cho phép bạn đưa ra giả định nếu một chỉ mục có được sử dụng bởi một truy vấn riêng lẻ hay không:

ClusterControl có thể là một công cụ tuyệt vời để cải thiện hiệu suất cơ sở dữ liệu của bạn đồng thời giúp bạn bớt rắc rối khi bảo trì. Để tìm hiểu thêm về những gì ClusterControl có thể làm để cải thiện hiệu suất của các phiên bản MySQL của bạn, hãy xem xét trang ClusterControl dành cho MySQL.

Tóm tắt

Như bạn có thể nói bây giờ, các chỉ mục trong MySQL là một con thú rất phức tạp. Để chọn chỉ mục tốt nhất cho phiên bản MySQL của bạn, hãy biết các chỉ mục là gì và chúng làm gì, biết các loại chỉ mục MySQL, biết lợi ích và nhược điểm của chúng, tự tìm hiểu về cách các chỉ mục MySQL tương tác với các công cụ lưu trữ, cũng hãy xem ClusterControl để biết MySQL nếu bạn cảm thấy rằng việc tự động hóa các tác vụ nhất định liên quan đến các chỉ mục trong MySQL có thể giúp một ngày của bạn dễ dàng hơn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn triển khai cơ sở dữ liệu đám mây tự động

  2. Cách hoạt động của LEFT () trong MariaDB

  3. Cách ACOS () hoạt động trong MariaDB

  4. 4 cách để kiểm tra kiểu dữ liệu của cột trong MariaDB

  5. Cách EXTRACT () hoạt động trong MariaDB