我试图运行此查询: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