我需要根据条件条件过滤查询。看起来很简单,我只是在寻找优化查询的想法
我需要根据季节、国家/地区和产品过滤价格。所以查询或多或少会像:
SELECT Country, Season, Product, Price
FROM Table
WHERE (Country = 'UK' AND Season = 'High' AND Product = 'X' AND Price < 30)
OR
(Country = 'ES' AND Season = 'Low' AND Product = 'Y' AND Price < 25)
OR
(Country = 'FR' AND Season = 'Mid' AND Product = 'Z' AND Price < 50)
等等。问题是组合的数量很大,会使这变得不切实际。欢迎任何想法
答案 0 :(得分:1)
假设所有 AND
ed 表达式都具有相同的列,那么大多数数据库都会很好地处理您的查询。他们会在 (Country, Season, Product, Price)
.
如果你有这样的索引并且没有重叠的条件,你也可以将逻辑表述为:
SELECT Country, Season, Product, Price
FROM Table
WHERE Country = 'UK' AND Season = 'High' AND Product = 'X' AND Price < 30
UNION ALL
SELECT Country, Season, Product, Price
FROM Table
WHERE Country = 'ES' AND Season = 'Low' AND Product = 'Y' AND Price < 25
UNION ALL
. . .
这更灵活。如果不是所有条件都完全相同,这仍然可以使用索引进行查询。
您也可以使用 JOIN
来表达。在查询中,您可以创建一个派生表:
SELECT Country, Season, Product, Price
FROM (VALUES ('UK', 'High', 'X', 20),
('ES', 'LOW', 'Y', 25),
. . .
) v(Country, Season, Product, Price) JOIN
Table t
ON t.country = v.country AND
t.season = v.season AND
t.product = v.product AND
t.price < v.price;
您希望此查询具有相同(或相似)的索引。
当然,您可以将值存储在单独的表中。