我有如下查询优化问题。
我有两个相关的表。
Commodity (This table has 75 Thousand records)
CommodityID (PK)
CommodityName
CommoditySupplier (This table has approx 800 Million records)
CommoditySupplierID (PK)
SupplierID (FK)
CommodityID (FK)
我正在执行以下查询以列出具有CommodityName'SearchString'的SupplierID
SELECT SuppllierID
FROM CommoditySupplier
WHERE CommodityID IN (SELECT CommodityID FROM Commodity WHERE CommodityName Like '%SearchString%')
问题是,它非常慢。执行时间超过30-40分钟。有时甚至更多。 请指导我优化查询。还是应该以某种方式更改结构? 预先感谢。
答案 0 :(得分:2)
通常JOIN
或EXISTS
更快:
SELECT cs.SuppllierID
FROM CommoditySupplier cs
WHERE EXISTS (SELECT 1
FROM Commodity c
WHERE c.CommodityID = cs.CommodityId AND
c.CommodityName Like '%SearchString%'
);
为了提高性能,您希望在Commodity(CommodityID, CommodityName)
上建立索引。
由于使用通配符进行搜索,因此可能仍无法获得很好的性能。如果可以使用=
或IN
,请使用其中一种构造代替LIKE
。否则,您可能需要考虑全文索引。