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 などの他のデータベースにはそのような構文があります)。ある場合、結合IN.

ただし、許容できないほどパフォーマンスが低いという証拠がない限り、最初のクエリを毎回使用します。

于 2012-11-26T02:03:42.507 に答える