Bài viết này thảo luận về các chỉ mục và cách bạn có thể sử dụng chúng để cải thiện hiệu suất truy vấn cơ sở dữ liệu MySQL.
Hiệu suất và chỉ mục cơ sở dữ liệu
Chỉ mục cơ sở dữ liệu trong MySQL cho phép bạn tăng tốc hiệu suất của SELECT câu lệnh truy vấn. Đối với các bảng nhỏ, một chỉ mục không giúp được gì nhiều. Tuy nhiên, nếu bạn có các bảng với lượng lớn dữ liệu, các chỉ mục có thể cải thiện đáng kể hiệu suất.
Tất cả các hành vi sau đây đều là dấu hiệu cho thấy các bảng có thể được hưởng lợi từ việc thêm chỉ mục:
- Trang web của bạn tải rất chậm hoặc hoàn toàn không tải.
- Một ứng dụng không thể kết nối với cơ sở dữ liệu của nó.
- Các truy vấn cơ sở dữ liệu đã được sao lưu.
Nếu bạn gặp bất kỳ sự cố nào trong số này, bạn nên phân tích các truy vấn cơ sở dữ liệu của mình và xem xét thêm các chỉ mục.
Nếu bạn có một VPS được quản lý hoặc máy chủ chuyên dụng được quản lý, kích thước bộ đệm sắp xếp tăng lên cũng có thể giúp ích ngoài việc thêm chỉ mục. Vui lòng mở một vé trên Cổng thông tin khách hàng tại https://my.a2hosting.com để thảo luận về lựa chọn này với Guru Crew của chúng tôi.Phân tích các truy vấn cơ sở dữ liệu
Để xác định bảng nào có thể có lợi khi sử dụng chỉ mục, bạn phải phân tích các truy vấn cơ sở dữ liệu của mình. CHỌN GIẢI THÍCH tuyên bố giúp bạn làm điều này. Để phân tích các truy vấn cơ sở dữ liệu, hãy làm theo các bước sau:
- Đăng nhập vào tài khoản của bạn bằng SSH.
- Tại dấu nhắc lệnh, nhập lệnh sau, thay thế tên người dùng bằng tên người dùng tài khoản Lưu trữ A2 và cơ sở dữ liệu của bạn với tên của cơ sở dữ liệu:
mysql -u username -p database
- Tại lời nhắc Nhập Mật khẩu, hãy nhập mật khẩu của bạn. Lời nhắc mysql> xuất hiện.
-
Nhập lệnh SQL sau:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Nếu bạn viết mã ứng dụng của riêng mình, thì bạn đã biết CHỌN câu lệnh bạn sử dụng để truy xuất dữ liệu. Nếu bạn đang sử dụng ứng dụng của bên thứ ba, chẳng hạn như WordPress hoặc PrestaShop, bạn có thể cần kiểm tra mã nguồn hoặc nhật ký cơ sở dữ liệu để xác định chính xác CHỌN các câu lệnh được sử dụng để truy xuất dữ liệu. -
Đầu ra từ CHỌN GIẢI THÍCH cho biết cách trình tối ưu hóa truy vấn MySQL sẽ thực thi truy vấn. Ví dụ, hãy xem xét kết quả sau:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 142 Extra: Using where 1 row in set (0.00 sec)
Trong ví dụ này, kết quả đầu ra:
- Các_có_cách_có thể và key cả hai giá trị đều là NULL , cho biết rằng MySQL không có chỉ mục mà nó có thể sử dụng cho truy vấn này.
- Hàng giá trị chỉ ra rằng MySQL sẽ đọc 142 hàng cho truy vấn này. Nếu có tổng số 142 hàng trong bảng, điều này có nghĩa là MySQL phải kiểm tra mọi hàng để tạo tập kết quả. Việc này có thể mất khá nhiều thời gian đối với một chiếc bàn lớn.
Mặt khác, nếu chúng ta tạo chỉ mục có tên index_name cho họ , MySQL có thể tạo kết quả đầu ra sau cho cùng một truy vấn:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: range possible_keys: index_name key: index_name key_len: 22 ref: NULL rows: 17 Extra: Using where; Using index 1 row in set (0.00 sec)
Như bạn có thể thấy, can_keys và key các giá trị chỉ ra rằng MySQL đã tìm thấy một chỉ mục mà nó có thể sử dụng để tối ưu hóa truy vấn. Ngoài ra, MySQL sẽ chỉ đọc 17 hàng để tạo tập kết quả, thay vì tất cả 142 hàng. (Điều này có nghĩa là bảng có 17 hàng trong đó họ bắt đầu bằng “T”.) Cuối cùng, Thêm giá trị cũng chỉ ra rằng MySQL sẽ sử dụng một chỉ mục cho truy vấn.
Thêm, xóa và xem các chỉ mục trong bảng
Sau khi bạn phân tích các truy vấn cơ sở dữ liệu của mình và xác định vị trí tắc nghẽn hiệu suất, bạn đã sẵn sàng thêm các chỉ mục. Để thực hiện việc này, hãy làm theo các bước sau:
- Đăng nhập vào tài khoản của bạn bằng SSH.
- Tại dấu nhắc lệnh, nhập lệnh sau, thay thế tên người dùng bằng tên người dùng tài khoản Lưu trữ A2 và cơ sở dữ liệu của bạn với tên của cơ sở dữ liệu:
mysql -u username -p database
- Tại lời nhắc Nhập Mật khẩu, hãy nhập mật khẩu của bạn. Lời nhắc mysql> xuất hiện.
-
Để thêm chỉ mục vào bảng, hãy nhập lệnh SQL sau. Thay thế tên_bảng với tên của bảng, index_name với tên của chỉ mục mới (có thể là bất kỳ thứ gì bạn muốn) và table_column với tên của cột bảng mà bạn muốn thêm chỉ mục:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Mặc dù các chỉ mục có thể cải thiện hiệu suất, nhưng các chỉ mục cũng có thể tác động tiêu cực đến hiệu suất nếu có quá nhiều trong số đó. Điều này là do bảng càng có nhiều chỉ mục, MySQL càng phải làm nhiều việc để cập nhật chúng. Bí quyết là tìm ra sự cân bằng phù hợp giữa đủ các chỉ số để cải thiện hiệu suất, nhưng không quá nhiều chỉ số tác động tiêu cực đến hiệu suất. -
Để xóa chỉ mục khỏi bảng, hãy nhập lệnh SQL sau. Thay thế tên_bảng bằng tên của bảng và thay thế index_name với tên của chỉ mục mà bạn muốn xóa:
ALTER TABLE table_name DROP INDEX index_name;
-
Để xem tất cả các chỉ mục cho một bảng, hãy nhập lệnh SQL sau. Thay thế tên_bảng với tên của bảng:
SHOW INDEX FROM table_name \G
Sau khi tạo chỉ mục, bạn nên sử dụng CHỌN GIẢI THÍCH một lần nữa để xem các truy vấn bị ảnh hưởng như thế nào. Ngoài ra, bạn nên tiếp tục theo dõi hiệu suất cơ sở dữ liệu để xem có cải tiến hay không. Bạn có thể phải chạy một loạt các bài kiểm tra để tìm ra số lượng chỉ mục tối ưu cho cơ sở dữ liệu của mình.
Thông tin khác
- Để biết thêm thông tin về chỉ mục và tối ưu hóa MySQL, vui lòng truy cập https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- Để biết thêm thông tin về GIẢI THÍCH tuyên bố, vui lòng truy cập https://dev.mysql.com/doc/refman/5.5/en/explain.html.