このクエリのパフォーマンスを向上させようとしています。それを最適化するために私ができることは何ですか?このクエリを改善しようとしています
SELECT * FROM bldng
WHERE bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%'
OR bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500
このクエリのパフォーマンスを向上させようとしています。それを最適化するために私ができることは何ですか?このクエリを改善しようとしています
SELECT * FROM bldng
WHERE bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%'
OR bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500
SQL Serverを使用している場合は、Table Hints (MSDN link)を使用できます。 NOLOCKは一般的です。
ワイルドカードのプレフィックスのため、bldng
のフルスキャンを実行します。ワイルドカード接頭辞を削除してbldng_type
にインデックスを追加すると、パフォーマンスが大幅に向上するはずです。 %text%
が遅い
「%検索文字列%」を使用しているため、末尾の2つの記号がそれらの列のインデックスを壊します。代わりに全文索引を使用する方が良いでしょう。あなたが本当の性能と正確さを望むなら、LuceneまたはSphinx全文検索エンジンを使うことができます。
インデックス化area_sqf
*
ではなく、必要な列のみを指定すると役立ちます。
建物のさまざまなカテゴリを選択しようとしているようです。 bldngテーブルに 'bldng_category'カラムを入れることをお勧めします。この方法は、あなたがこのように単純なクエリを使用することができます。 をbldng FROM
SELECT * WHERE( 'PTR'、 'FACILITY_B'、 'FACILITY-B')でbldng_categoryとarea_sqf> 500
あなたが必要がない場合すべての列で '*'を必要な列のリストに置き換えることができます。 – JKirchartz
データに依存しないことはほとんどできません。あなたの問い合わせは、 'bldng.bldng_type'のすべての単一値の内容全体を調べることに依存します。 'bldng'が大きければ遅くなります。代わりに、このような問合せが不要なように表のデザインを改善する必要があります。 – ruakh
'bldng_type'カラムに入る文字列の完全なリストはどれくらいですか? – dasblinkenlight