关系表SQL查询优化/性能问题?

时间:2019-11-11 12:29:32

标签: sql

我有如下查询优化问题。

我有两个相关的表。

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分钟。有时甚至更多。 请指导我优化查询。还是应该以某种方式更改结构? 预先感谢。

1 个答案:

答案 0 :(得分:2)

通常JOINEXISTS更快:

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。否则,您可能需要考虑全文索引。