【发布时间】:2021-03-15 12:28:54
【问题描述】:
我有以下查询,它在 Oracle 开发人员中工作得非常好
select TRIM(a.filterh)
from CHANNEL a,GENRE b
where b.label = 'M001CL01_ABC'
and a.s_r_id = b.r_id
and a.filterh in (select c.filterh
from CHANNEL c, GENRE d
where d.label = 'M001AL03' and c.s_r_id = d.r_id)
我只是尝试为 SQL 开发人员简化上面的查询和一些语法更改,而下面的查询需要大量时间才能在 SSMS 中运行
select TRIM(a.filterh)
from CHANNEL a
inner join GENRE b on a.s_r_id = b.r_id
where b.label = 'M001CL01_ABC'
and a.filterh in (select c.filterh
from CHANNEL c
inner join GENRE d on c.s_r_id = d.r_id
where d.label = 'M001AL03')
我只是想了解我在这里做错了什么,如何改进我的查询以及为什么 SQL 查询需要很多时间。
谢谢。
【问题讨论】:
-
“不”不是很具有描述性。你有错误吗?出乎意料的结果?怎么了?请注意,在这两个数据库中,可能有比这里所做的更好的方法。
-
@GordonLinoff 我已经更新了我的问题,你能告诉我什么是 SQL 查询的更好方法吗?
-
这将有助于查看表模式和现有索引。
in子句看起来很可疑,可能只用exists替换Genre表? -
我会尽快发布架构,数据以十万为单位,因此无法发布
-
请添加表和索引定义,也请通过brentozar.com/pastetheplan分享查询计划
标签: sql sql-server ssms