Tôi muốn chọn nội dung của cột text
từ entrytable
.Làm thế nào để giải thích đầu ra của MySQL GIẢI THÍCH?
EXPLAIN SELECT text
FROM entrytable
WHERE user = 'username' &&
`status` = '1' && (
`status_spam_user` = 'no_spam'
|| (
`status_spam_user` = 'neutral' &&
`status_spam_system` = 'neutral'
)
)
ORDER BY datum DESC
LIMIT 6430 , 10
bảng có ba chỉ số:
- index_user (người dùng)
- index_datum (cột mốc)
- index_status_mit_spam (trạng thái, status_spam_user, status_spam_system)
Các GIẢI THÍCH kết quả là:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE entrytable ref index_user,index_status_mit_spam index_user 32 const 7800 Using where; Using filesort
- Là
possible_keys
chỉ mục MySQL có thể muốn sử dụng vàkeys
chỉ mục MySQL thực sự sử dụng? - Tại sao chỉ mục
index_status_mit_spam
không được sử dụng? Trong truy vấn, các colums có cùng thứ tự như trong chỉ mục, ... - Tại sao chỉ mục
index_datum
không được sử dụng choORDER BY
? - Làm cách nào để tối ưu hóa chỉ mục bảng hoặc truy vấn? (Các truy vấn trên cần đến 3 giây có khoảng một triệu mục trong bảng)
* "possible_keys biểu thị tất cả các chỉ số của bảng của bạn (phím hoặc cột index)" * - không đúng sự thật. Nó biểu thị các chỉ mục có thể được sử dụng cho truy vấn được đề cập. – Madbreaks