我目前有一个 SQL 查询问题。我有一个包含 colour_code 字段的产品表。我无法更改产品表,因为它是从外部来源获取的。
在网站上,用户可以通过 colour_code 搜索产品并返回该颜色的所有可用产品。
手头的任务是让不同的搜索词返回具有不同颜色代码的特定产品。为此,我添加了一个名为 colour_code_alias 的新表,该表仅包含一个与产品表中的 colour_code 字段相对应的 colour_code 字段和一个将返回此结果的 alias 字段。请参见下表示例。
**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"' 时,正在使用产品表中的 colour_code 索引。
我正在寻求帮助以提高此类查询的性能,我应该如何索引这种类型的查询,甚至应该重写它?
任何帮助表示赞赏。
谢谢,马丁。
就像我所做的一样。我已经删除了左连接并在 where 子句中添加了一个选择查询。查询如下所示:
Select * from product
where (product.colour_code = 'XYZ' or product.colour_code = (select colour_code from colour_code_alias where alias = 'XYZ') );