1

私はこれに対する答えを探し回りましたが、見つけられた唯一の参照は、% (モジュロ) を含む演算子"sargable" (つまり、演算子が操作していたインデックスを使用できる) であることを示唆するあいまいなフォーラム投稿でした。

ただし、モジュロを使用してプロセスを並列化すると、主キー フィールドであっても、モジュロがオンになっているインデックスが使用されないように見える状況がいくつかあります。これは、オプティマイザがテーブル スキャンのほうがコストがかからないと判断したためかもしれませんが、インデックスを排除する理由を特定するのは困難です。

決定的な答えを持っている人、または同様の経験を共有している人はいますか?

Postgres / EDB v9.3

ティア。

編集など

CREATE TABLE my_table(id bigint, othercolumn varchar(50), PRIMARY KEY(id))

...x 百万のレコードをテーブルに挿入...

SELECT othercolumn from my_table where id % 1000 = 0
4

1 に答える 1

2

インデックスは、不変の任意の列または式で使用できます。つまり、式の結果は、基になる列の値に直接、またはそれらが使用されている式を通じてのみ依存する必要があります。したがって、モジュロ演算子は、インデックスで使用するのに完全に有効です。

于 2015-11-18T10:51:53.477 に答える