複雑なクエリを生成する解析ソフトウェアを作成しています。 where句を作成すると、同じデータベースフィールドに複数の制約が追加されることがあります。私はPostgreSQLが複数の制約を単純なものに書き換えるかどうか疑問に思っていました。私はいくつかのテストを行いました:postgresqlでのAND条件の最適化
SELECT COUNT(id) FROM employee WHERE age BETWEEN 18 AND 40;
私はこれを10回実行し、平均所要時間は65msでした。今、私は最適化するために、少し長いが、ささいなクエリを作る:
SELECT COUNT(id) FROM employee WHERE
(age BETWEEN 18 AND 40) AND
(age BETWEEN 18 AND 40) AND
(age BETWEEN 18 AND 40);
このクエリはたくさん遅いれ、平均で100ミリ秒かかります。また、次のクエリ:それは同等ですながら
SELECT COUNT(id) FROM employee WHERE
(age BETWEEN 28 AND 70) AND
(age BETWEEN 25 AND 40) AND
(age BETWEEN 22 AND 33) AND
(age BETWEEN 18 AND 30);
は、平均で105msを取ります
SELECT COUNT(id) FROM employee WHERE age BETWEEN 28 AND 30;
倍の速度で実行されました。
これらのクエリは意味的に同等であり、プランナがそれらに接触する前に、それらが同じクエリに最適化されることを期待していました。これは、クエリー・リライタにとっては、果敢なものではないようです。どのような隠し設定オプションがありますか?私はpostgresql 9.4.5を使用しています。
ありがとうございました!