【发布时间】:2011-03-09 22:28:01
【问题描述】:
我正在尝试运行此查询:
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 个项目,我会在说明中得到 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;
我将如何做到这一点?查询计划器似乎失败了。
谢谢,
乔恩
【问题讨论】:
-
这有点骇人听闻,但您可以使用高效的
SELECTs 的UNION,例如(SELECT * FROM matrix WHERE id1 = 1 AND id2 = 2) UNION (SELECT * FROM matrix WHERE id1 = 3 AND id2 = 5) -
为什么
matrix变成了s1_movie?
标签: mysql sql performance