Hướng dẫn explain trong mysql - giải thích trong mysql
Đã đăng vào thg 2 5, 2020 4:49 CH 8 phút đọc 8 phút đọc Explain trong MySqlExplain là câu lệnh được sử dụng để thu được kế hoạch thực thi truy vấn, hay MySQL sẽ thực thi truy vấn của chúng ta như thế nào. Bạn có thể thấy thông tin về kế hoạch đó bằng cách thêm lệnh EXPLAIN vào đầu mỗi query. Nó hoạt động với các mệnh đề SELECT, DELETE, INSERT, REPLACE, và UPDATE, và nó hiển thị thông tin từ trình tối ưu hóa về kế hoạch thực thi câu truy vấn. EXPLAIN là một trong những công cụ quan trọng giúp hiểu và tối ưu truy vấn MySQL. Nếu sử dụng một cách thuần thục thì sẽ giúp chúng ta tránh khỏi các query tồi, cũng giống như phát hiện ra các bottle neck của hệ thống như chưa dán index... Các thông số của ExplainChúng ta cùng tìm hiểu kết quả trả về của một câu truy vấn đơn giản qua ví dụ sau.
Ở đây explain đã trả về tất cả là 10 cột, và chúng ta sẽ đi tìm hiểu về từng cột này nhé 1. idLà số thứ tự cho mỗi câu SELECT trong truy vấn của bạn (trường hợp bạn sử dụng các truy vấn lồng nhau - nested subqueries). 2. select_typeVề cơ bản thì bạn hiểu đây là tham số về kiểu query. Nó bao gồm các giá trị sau
3. tableNó chỉ là tên bảng liên quan đến câu truy vấn. 4. typeTrường này thể hiện cách MySQL joins các bảng. Đây có thể coi là trường quan trọng nhất trong kết quả của explain. Nó có thể chỉ ra các index bị thiếu và nó cũng có thể cho thấy câu truy vấn của bạn cần phải xem xét lại. Các giá trị của trường này là:
5. possible_keysList tất cả các key bởi MySql để tìm ra các dòng trong bảng. Các key này có thể có hoặc không được sử dụng trong thực tế 6. keyKey được chính thức MySql sử dụng để làm index để tìm kiếm. Cột này có thể chứa khóa không được liệt kê ở cột possible_keyspossible_keys 7. key_lenHiển thị độ dài của index trình tối ưu hóa truy ván chọn để sử dụng. Ví dụ, key_len = 2 tức là cần bộ nhớ để lưu 2 ký tự 8. refHiển thị các cột hoặc các hằng số được so sánh với index được nêu ra ở cột key. Trong trường hợp query là JOIN thì đây chính là giá trị của key ở bảng tương ứng mà được join cùng với bảng chính 9. rowsNó thể hiện số dòng mà mysql "dự định" sẽ fetch ra từ bảng trong query đó. Đây là một chỉ số rất quan trọng, nhất là khi bạn dùng JOIN hoặc truy vấn con Có một điểm chú ý là khi query thuộc type là "DERIVED" tức là nó sẽ là một subquery nằm trong FROM statement, thì khi đó nếu không execute query thì mysql sẽ không thể nào "đoán" được số dòng cần lấy ra. Do vậy khi đó EXPLAIN sẽ khá là tốn thời gian nếu subquery đó nặng 10. extraĐây cũng là một thông số rất quan trọng. Các giá trị kiểu như Using Temporary, Using filesort,... của cột này có thể cho thấy một truy vấn không thực sự tốt. Chỉ cần nhìn qua extra thì bạn sẽ đoán được phần nào chuyện gì sẽ xảy ra đằng sau một query nào đó Kết luậnThông qua giá trị của id và select_type, ta có thể biết được trình tự access vào các bảng để lấy ra cái gì, kết hợp với bảng khác như nào. Thông qua giá trị của type, key, ref và rows, ta có thể biết ứng với mỗi bảng sẽ có những thông tin gì được fetch ra, truy cập vào bảng nào sẽ nặng, để chúng ta có thể đánh index cho bảng đó Thông qua giá trị của extra, chúng ta sẽ có một cái nhìn tổng quát về query nào đó Tham khảohttps://www.eversql.com/mysql-explain-example-explaining-mysql-explain-using-stackoverflow-data/ All rights reserved |