これを処理する最善の方法は、モデルを正規化することだと思います。私はそれを試していないので、おそらくエラーが含まれていますが、そのアイデアは明確でなければなりません:
CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR(100) UNIQUE);
CREATE TABLE groups (id INTEGER PRIMARY KEY, name VARCHAR(100) UNIQUE);
CREATE TABLE user_group (
user INTEGER NOT NULL REFERENCES users,
group INTEGER NOT NULL REFERENCES groups);
CREATE UNIQUE INDEX user_group_unique ON user_group (user, group);
SELECT users.name
FROM user_group
INNER JOIN users ON user_group.user = users.id
INNER JOIN groups ON user_group.group = groups.id
WHERE groups.name = 'Engineering';
実行計画はかなり効率的です。特定のグループのメンバーを見つけるためにsequential_scanではなくindex_scanを使用できるようにするには、user_group(group)を索引付けしても最適化できます。
正規化を妨げる原因は何ですか? –
実際のテーブルには、複数の複数の値を持つカラムがあります。 Dbはパフォーマンスが低下するため、過度の結合を避けたいと考えていたこれらの列に対して、比較的正規化されています。私が使用した 'User'テーブルは単なる例です。 – Anoop