如何创建临时表

时间:2012-11-26 01:53:40

标签: mysql

我有以下查询,但没有利用request_id

上的主键
SELECT request_id, exec_datetime FROM requests
WHERE request_id mod 1000 = 1;

我希望通过创建一个以值1开头的临时表来实现一些优化,并且一直增加1000到1,000,000,这样我就可以执行类似的操作

SELECT request_id, exec_datetime FROM requests
WHERE request_id IN (SELECT id FROM table);

我是否可以使用语法动态生成此表,还是实际上必须创建此表?

修改

我注意到使用此解决方法执行查询的速度提高了约8倍

CREATE TABLE dummy (
thousand INT(10) UNSIGNED,
UNIQUE(thousand)
);

INSERT INTO dummy (SELECT request_id FROM requests WHERE request_id mod 1000=1 );

SELECT r.request_id, r.exec_datetime FROM requests r
JOIN dummy d
ON d.thousand = r.request_id;

1 个答案:

答案 0 :(得分:1)

不,没有为mysql生成类似值的语法(其他数据库,例如postgres do 具有这样的语法)。如果有, join 的效果将优于IN

但是,我会每次都使用您的第一个查询,除非有证据表明它的表现不可理解。