Tôi có một câu hỏi ví dụ như:Loại chỉ mục nào lý tưởng cho truy vấn này?
SELECT
rest.name, rest.shortname
FROM
restaurant AS rest
INNER JOIN specials ON rest.id=specials.restaurantid
WHERE
specials.dateend >= CURDATE()
AND
rest.state='VIC'
AND
rest.status = 1
AND
specials.status = 1
ORDER BY
rest.name ASC;
Chỉ cần tự hỏi trong những dưới hai chỉ số, đó sẽ là tốt nhất trên bàn nhà hàng?
id,state,status,name
state,status,name
Bạn không chắc chắn nếu cột được sử dụng trong tham gia phải được bao gồm?
Vui đủ, mặc dù tôi đã tạo cả hai loại để thử nghiệm và cả hai lần MySQL chọn chỉ số chính, chỉ là id
. Tại sao vậy?
Giải thích Output:
1,'SIMPLE','specials','index','NewIndex1\,NewIndex2\,NewIndex3\,NewIndex4','NewIndex4','11',\N,82,'Using where; Using index; Using temporary; Using filesort',
1,'SIMPLE','rest','eq_ref','PRIMARY\,search\,status\,state\,NewIndex1\,NewIndex2\,id-suburb\,NewIndex3\,id-status-name','PRIMARY','4','db_name.specials.restaurantid',1,'Using where'
Không nhiều hàng vào lúc này vì vậy có lẽ đó là lý do tại sao nó được chọn TIỂU !?
Bạn luôn có thể sử dụng 'GIẢI THÍCH' để nhận một số thông tin về cách truy vấn chọn sẽ được thực thi. http://dev.mysql.com/doc/refman/5.0/en/using-explain.html –
Cyclonecode
Tôi đã làm, đó là cách tôi phát hiện ra nó đang sử dụng chỉ mục 'PRIMARY', chỉ chứa cột' id'. – Brett
Bạn có thể yêu cầu xuất bản giải thích đầy đủ và phiên bản MySQL không? –