ホームページ >データベース >mysql チュートリアル >PostgreSQL の LIKE クエリが非常に遅いのはなぜですか? どうすれば高速化できますか?

PostgreSQL の LIKE クエリが非常に遅いのはなぜですか? どうすれば高速化できますか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-23 03:46:10989ブラウズ

Why Are My PostgreSQL LIKE Queries So Slow, and How Can I Speed Them Up?

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 のパターン マッチングの詳細については、次のリソースを参照してください。

  • LIKE、SIMILAR TO、または正規表現によるパターン マッチング
  • LIKE はどのように実装されますか?
  • PostgreSQL での類似した文字列の効率的な検索

以上がPostgreSQL の LIKE クエリが非常に遅いのはなぜですか? どうすれば高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。