针对IN查询的select查询的SQL查询优化



我有一个视图,我想在这个视图上添加分页逻辑。有超过150万张唱片。如果我的where条件只选择用一个Id映射的特定记录,则需要更长的时间才能得到结果。我正在考虑只从主表中获取那些映射的记录,然后只从视图中选择那些记录,这会更快吗?

Select top 10 col1, col2, col3, ROW_NUMBER() OVER (ORDER BY col4 desc) from vMyView where someid=1

然后

Select top 10 col1, col2, col3 from vMyView where col1 in (Select col1 from tMyTable where someid=1)

仅供参考,我不是专家

假设典型的基数,我倾向于这样写:

select top 10 col1, col2, col3 
from vMyView v
inner join tMyTable t ON t.col1 = v.col1
WHERE t.someid = 1

但是,如果可以为vMyView中的每个col1值匹配tMyTable中的多个行,则这可能导致从vMyView复制行。如果可以复制行,基于row_number()的解决方案通常是最快的选择。


我想在此视图上添加分页逻辑

至于分页,您应该研究OFFSET/FETCH语法,而不是TOP n

SELECT col1, col2, col3
FROM vMyView v
ORDER BY <need an order by clause for paging to work>
OFFSET <pagenumber * pagesize> FETCH NEXT <pagesize> ROWS ONLY

最新更新