tsql - 优化 SQL Server 2012 的 SQL 查询
问题描述
我有一个包含 8 个表的数据库,我需要能够在其中 6 个表中搜索特定值。
简而言之,查询应该执行以下操作:
SELECT i.InActivity,
i.ReceivedTime,
i.ReceivedFrom,
i.DataSize,
o.FileName,
o.FileSize,
o.Status,
s1.UniqueReference,
s1.SenderCode,
s1.ReceiverCode,
s2.DetailId,
s3.UnitDescription,
t1.SenderCode,
t1.ReceiverCode,
t2.TaskDescription,
t3.TaskStatus
FROM InData i
LEFT JOIN OutData o WITH(NOLOCK) ON i.ActivityID = o.InActivity
LEFT JOIN SupplyDataLevel1 s1 WITH(NOLOCK) ON s1.InActivity = i.ActivityID
LEFT JOIN SupplyDataLevel2 s2 WITH(NOLOCK) ON s2.ParentId = s1.ActivityID
LEFT JOIN SupplyDataLevel3 s3 WITH(NOLOCK) ON s3.ParentId = s2.ActivityID
LEFT JOIN TasksDataLevel1 t1 WITH(NOLOCK) ON t1.InActivity = i.ActivityID
LEFT JOIN TasksDataLevel2 t2 WITH(NOLOCK) ON t2.ParentId = t1.ActivityID
LEFT JOIN TasksDataLevel3 t3 WITH(NOLOCK) ON t3.ParentId = t2.ActivityID
WHERE s1.IdSender = @searchParam OR
s1.IdReceiver = @searchParam OR
s2.StackNumber = @searchParam OR
s2.StackOrderNumber = @searchParam OR
s3.Reference = @searchParam OR
t1.ProcessReference = @searchParam OR
t1.ProcessStage = @searchParam OR
t1.MasterNumber = @searchParam OR
t2.ProcessStep = @searchParam OR
t3.SubProcessStep = @searchParam
所以问题是,必须有比这更好的方法。这些表包含数百万行,执行此查询无疑将花费数小时和数小时来执行,这与将具有搜索页面的网站押韵很糟糕。
我应该创建一个视图并查询那个视图,这会是一个更好的选择,性能明智吗?
欢迎任何帮助。
解决方案
推荐阅读
- spring-boot - Spring Boot 微服务中的会话管理
- linux - Linux一更改就保存文件
- reactjs - 有没有办法检查屏幕是否在底部标签导航中 - 反应导航 5.X
- wolfram-mathematica - 对变量有共同限制的并行 FindFit
- node.js - 将协商身份验证传递给 IIS 站点
- python - BS4 通过抓取表格给出一个奇怪的随机输出
- java - Java Selenium WebDriverWait 等待的时间比指定的等待时间长
- python - 为什么 pdfplumber 不产生任何数据?
- javascript - 如何在模板中通过javascript对从django传递的json进行编码
- java - 从响应中保存值并检查是否为空加特林