2012-11-26 154 views
0

我不上request_id如何创建临时表

SELECT request_id, exec_datetime FROM requests 
WHERE request_id mod 1000 = 1; 

我希望通过创建与值1开始的临时表来实现一些优化采取主键的优势,下面的查询和增量由1000一路攀升至1,000,000,这样我可以执行这样的事情

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

编辑

我注意到了执行查询有关8X与此变通方法更快

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

没有,没有一个语法生成像MySQL的值(其它数据库如Postgres的有这样的语法)。如果有,加入会比IN表现更好。

但是,我会每次都使用您的第一个查询,除非有证据表明它的执行效果令人无法接受。

+0

我明白了......如果您对我的用例感兴趣,请使用您对连接的建议,查看我的编辑!另外 - 你能看看我今天发布的其他问题吗? http://stackoverflow.com/questions/13557405/when-running-explain-if-the-field-value-for-key-is-not-null-but-extra-is-blank – user784637

+0

此外 - 是否有一个MySQL插入从1开始到最多100万的每1000行的语法?像这样'INSERT INTO dummy(SELECT request_id FROM requests WHERE request_id mod 1000 = 1);'但是上限是由我定义的,而不是'request'表中的最大行数? – user784637