0

我有以下查询,它没有利用主键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;
4

1 回答 1

1

不,没有像 mysql 那样生成值的语法(其他数据库,例如 postgres确实有这样的语法)。如果存在,则join的性能将优于IN.

但是,我每次都会使用您的第一个查询,除非有证据表明它的性能非常差。

于 2012-11-26T02:03:42.507 回答