現在、SQL クエリに問題があります。color_code フィールドを含む製品テーブルがあります。製品テーブルは外部ソースから取り込まれているため、変更できません。
Web サイトで、ユーザーは color_code で製品を検索し、この色で入手可能なすべての製品を返すことができます。
当面のタスクは、異なる検索用語で、異なるカラー コードを持つ特定の製品を返すようにすることです。このために、color_code_alias という新しいテーブルを追加しました。このテーブルには、product テーブルの color_code フィールドに対応する color_code フィールドと、この結果を返すエイリアス フィールドがあります。以下の表の例を参照してください。
**Product_tb**
id, colour_code
1, "ABC"
**colour_code_alias_td**
colour_code,alias
"ABC","XYZ"
したがって、ユーザーが XYZ を検索すると、ID が 1 の製品が返されます。「ABC」を検索すると、ID が 1 の製品も返されます。
私の問題は、インデックスを使用していないため、クエリの実行に時間がかかりすぎることです。私の簡略化されたクエリは以下のとおりです。
Select * from product
left join colour_code_alias cca on cca.colour_code = product.colour_code
where (product.colour_code = 'XYZ' or cca.alias = "XYZ")
説明を使用すると、このクエリにキーを使用していないことが示されます。where 句の「or cca.alias = "XYZ"」を削除すると、product テーブルの color_code インデックスが使用されています。
このようなクエリのパフォーマンスを向上させるためのヘルプを探しています。このタイプのクエリにどのようにインデックスを付けるか、または書き直す必要がありますか?
どんな助けでも大歓迎です。
ありがとう、マーティン。
私が行ったことについてのメモとして..左の結合を削除し、選択クエリをwhere句に追加しました。クエリは次のようになります。
Select * from product
where (product.colour_code = 'XYZ' or product.colour_code = (select colour_code from colour_code_alias where alias = 'XYZ') );