SQL-使用where子句连接两个视图时,查询性能降低

时间:2018-10-10 05:27:58

标签: sql sql-server performance sql-view

我正在SQL Server中运行以下查询,该查询在短短5秒内即可得到80,000+行和75+列的结果:

SELECT * FROM VIEW_ITEM_STOCK_LEDGER AS ItemLedger
    LEFT JOIN VIEW_PRODUCT_WITH_CHARACTERISTIC_COLUMN_DATA AS Characteristics
    ON Characteristics.Code = ItemLedger.ItemCode

但是,当我在查询中添加WHERE子句时,执行查询将花费很长时间。 13450条记录需要5分钟以上的时间。

SELECT * FROM VIEW_ITEM_STOCK_LEDGER AS ItemLedger
    LEFT JOIN VIEW_PRODUCT_WITH_CHARACTERISTIC_COLUMN_DATA AS Characteristics
    ON Characteristics.Code = ItemLedger.ItemCode
WHERE (ItemLedger.VoucherTypeCode=204 OR ItemLedger.VoucherTypeCode=205)

可能是什么原因?我该如何解决?

1 个答案:

答案 0 :(得分:-1)

在我看来,VoucherTypeCode列上没有索引。

如果VoucherTypeCode是数据库中表的列,则可以尝试为该列建立索引(请参见此article about creating indexes on MS Docs

如果VoucherTypeCode是多列的乘积,则可以尝试为视图本身建立索引(请参见此Article about indexed views on sqlshack.com

或者,如果您不想/不想创建索引,请在此StackOverflow-Thread

中签出可接受的答案