ホームページ >データベース >mysql チュートリアル >SQL で検索精度を下げながら単一の行を効率的に検索するにはどうすればよいですか?

SQL で検索精度を下げながら単一の行を効率的に検索するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-29 14:39:10986ブラウズ

How Can I Efficiently Find a Single Row with Decrementing Search Precision in SQL?

複数の SELECT ステートメントを使用して、精度を下げて単一行を検索する

データベース操作では、以下を使用して単一行を検索する必要がある場合があります。これには、結果が見つかるまで段階的に検索条件を下げることが含まれます。たとえば、ある画像を検索することを考えてください。 table:

問題:

次の条件を満たすテーブル内の行を検索します:

  • name LIKE 'text'
  • グループID = 10

このクエリの結果がない場合は、次のクエリを試してください:

  • name LIKE 'text'

If thereこのクエリの結果がまだない場合は、次のクエリを試してください:

  • group_id = 10

解決策:

UNION ALL ステートメントを使用すると、これらのクエリをすべて一度に実行できるため、検索精度が低下します。このステートメントは、次のように、さまざまなクエリ結果を指定された順序でマージします:

SELECT * FROM image WHERE name = 'text' AND group_id = 10
UNION ALL
SELECT * FROM image WHERE name = 'text'
UNION ALL
SELECT * FROM image WHERE group_id = 10
LIMIT 1;

最適化:

パフォーマンスを向上させるには、必ず適切なインデックスを作成してください。重要。この例では、次の列にインデックスを作成することをお勧めします:

  • image_name_grp_idx (name, group_id)
  • image_grp_idx (group_id)

LIMIT 1 句を追加することで、Postgres条件を満たす最初の行が見つかった後でさらなるクエリを停止することで、パフォーマンスを最適化できます。

一般化:

このメソッドは、任意の数の検索パラメーターを使用して一般化できます。 UNION ALL ステートメント内に SELECT ステートメントを追加するだけです。

並べ替え:

LIMIT 1 句は 1 行のみを返しますが、関連性に基づいて結果を並べ替える場合、この方法は実用的ではない可能性があります。この場合、並べ替えを行うには、より複雑なクエリが必要になります。

以上がSQL で検索精度を下げながら単一の行を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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