查詢:如何優化此查詢?
select id,
title
from posts
where id in (23,24,60,19,21,32,43,49,9,11,17,34,37,39,46,5
2,55)
解釋計劃:
mysql> explain select id,title from posts where id in (23,24,60,19,21,32,43,49,9,11,17,34,37,39,46,5
2,55);
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | posts | ALL | PRIMARY | NULL | NULL | NULL | 30 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.05 sec)
ID是職位表的主鍵。
我不認爲你可以:你正在選擇主鍵的顯式值,而且你的EXPLAIN預期會有不同的結果(即30行而不是18),這可能是由於optimizer交互的方式與統計。或者我誤解了你的問題? – davek 2009-10-22 14:37:05
@Dave K 30這裏是MySQL爲了處理查詢而希望讀取的行數,它不是它在結果列表中所期望的行數。由於它只需要很少的行(可能全部包含在單個節點中,或幾個任意速率),因此「掃描」比「查找」更有效。 – mjv 2009-10-22 14:51:50
如果你正在尋找一個單一的ID,這個計劃是什麼樣子? – Thorsten 2009-10-22 19:55:31