sql - SQL - 使用 Where 子句连接两个视图时查询性能变慢
问题描述
我在 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)
可能是什么原因?我该如何解决这个问题?
解决方案
在我看来,VoucherTypeCode 列上没有索引。
如果 VoucherTypeCode 是数据库中表的列,您可以尝试为该列建立索引(请参阅这篇关于在 MS Docs 上创建索引的文章)
如果 VoucherTypeCode 是多列的产物,您可以尝试索引视图本身(请参阅sqlshack.com 上有关索引视图的这篇文章)
或者,如果您不能/不想创建索引,请查看此StackOverflow-Thread中接受的答案
推荐阅读
- javascript - 验证 Dropbox 以确保用户选择了一个值
- php - 将 jQuery var 发布到 PHP 文件并设置 cookie
- ios - 视觉工作室中的未知个人资料
- jenkins-pipeline - 丢弃多分支管道作业中的旧构建,并不会真正从服务器中删除构建
- activemq-artemis - ActiveMQ 核心桥接集群
- carthage - 迦太基没有使用安装的最新版本
- java - RecycleView 重叠上的浮动操作按钮
- c# - 如何传递一个 int 数组和一个 List
作为使用 SWIG 时从 C# 到 C++ 的参数 - php - PHP - 连接到不同的服务器数据库
- sql - 每当业务发生变化时标记