4

特定の列に対する DISTINCT クエリの結果をできるだけ速く取得するには、どのインデックスを設定する必要がありますか?

表の列の例:

id        INTEGER
name      VARCHAR(32)
groupname VARCHAR(16)

時々、すべてのグループのリストを取得する必要があります。

SELECT DISTINCT groupname FROM data ORDER BY groupname

テーブルには 20 万を超えるエントリを含めることができますが、グループは約 12 個にすぎません。データは CSV ファイルから頻繁にインポートされるため、グループ名に別のテーブルを使用したくありません。

4

2 に答える 2

5

この場合、インデックスをオンにgroupnameすると、可能な限り最良の結果が得られます。

それが十分でない場合は、さらにいくつかのオプションを検討してください。最初に、絶対に必要な場合にのみ実行するように、そのクエリの結果をキャッシュすることができます。次に、別のテーブルを作成してgroupname値を保存し、挿入トリガーを介して入力することができます (これにより、CSV インポート プロセスを変更する必要がなくなります)。

于 2013-01-02T14:18:37.787 に答える
0

グループ名にインデックスを付けると、問題が解決します。挿入/更新中のクエリのパフォーマンスが非常に心配な場合は、列全体をインデックス化する代わりに、「列プレフィックスのインデックス化」を試してください。

varchar にインデックスを追加するだけでは、書き込みごとにインデックス ルックアップを更新する必要があるため、挿入/更新が遅くなる可能性があります。詳細については、BTree インデックス作成アルゴリズムを参照してください。

于 2013-01-02T14:45:35.973 に答える