我試圖運行此查詢:mysql的不充分利用主鍵 「SELECT * from表where(COL,COL)在」
select * from matrix where (id1, id2) in ((1,2), (3,5));
但它非常緩慢。 (id1,id2)是主鍵,所以這應該是一個快速查找。查詢計劃失敗了嗎?
解釋說:
| 1 | SIMPLE | s1_movie | ALL | NULL | NULL | NULL | NULL | 48768876 | Using where |
其中48768876是排它的掃描數量。
如果我只在'in'中搜索1項,我在explain中得到rows = 1,這是正確的,因爲它應該只是查找。
這裏的表:
CREATE TABLE s1_movie (
id1 INT NOT NULL,
id2 INT NOT NULL,
freq INT NOT NULL,
diff FLOAT NOT NULL,
PRIMARY KEY (id1, id2)
) ENGINE=INNODB;
我怎麼會去使這個快?這似乎是查詢計劃者失敗。
感謝,
喬恩
這有點冒失,但你可以做一個有效的SELECT的'UNION',例如, '(SELECT * FROM matrix WHERE id1 = 1 AND id2 = 2)UNION(SELECT * FROM matrix WHERE id1 = 3 AND id2 = 5)' – 2011-03-09 22:38:13
爲什麼'matrix'變成's1_movie'? – RichardTheKiwi 2011-03-09 22:38:32