ホームページ >データベース >mysql チュートリアル >PostgreSQL の LIKE クエリが非常に遅いのはなぜですか? どうすれば高速化できますか?
PostgreSQL LIKE クエリ: パフォーマンスのボトルネックと最適化戦略
PostgreSQL の LIKE
クエリは、計算量が多いことで知られていますが、特定のデータベース テーブルに対して一貫性のないパフォーマンスを示しています。 一部のクエリは 200 ~ 400 ミリ秒以内に完了しますが、最大 30 秒かかるクエリもあります。
標準インデックス作成の制限
owner1
フィールドで B ツリー インデックスを使用する最初の試みは、パフォーマンスを向上させることができませんでした。 さまざまな LIKE
構文のバリエーションを試しても、有意な結果は得られませんでした。
Trigram Indexes: 優れたソリューション
pg_trgm
拡張機能は、特に長い文字列の場合、LIKE
および ILIKE
操作のパフォーマンスを大幅に向上させるトライグラム インデックス (GIN/GiST) を提供します。 重要なのは、これらのインデックスは 3 文字未満の単語もサポートしていることです。
プレフィックス マッチングの最適化
先頭にワイルドカードを使用しない検索の場合は、次の代替手段を検討してください。
^@
演算子/starts_with()
関数 (PostgreSQL 11 ): PostgreSQL 11 で導入された ^@
演算子と starts_with()
関数は、SP-GiST インデックスで使用すると効率的なプレフィックス マッチングを提供します。 .COLLATE "C"
: COLLATE "C"
を使用して作成されたインデックスは text_pattern_ops
演算子クラスと同様に動作し、B ツリー インデックスとの最適化されたプレフィックス マッチングを可能にします。text_pattern_ops
演算子クラス: この演算子クラスは、左アンカー パターン (先頭のワイルドカードなし) 用に特別に設計された B ツリー インデックスを作成します。追加リソース
PostgreSQL のパターン マッチングの詳細については、次のリソースを参照してください。
以上がPostgreSQL の LIKE クエリが非常に遅いのはなぜですか? どうすれば高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。