【发布时间】:2020-03-26 13:24:42
【问题描述】:
我有一个视图,我想在这个视图上添加分页逻辑。有超过 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)
仅供参考,我不是专家
【问题讨论】:
-
取决于
vMyView的构建方式以及视图基础表上存在的索引(以及tMyTable上的索引)。我的猜测是,在你的 SQL 中添加更多逻辑不会让它更快。 -
好吧,最重要的是,IN 速度非常慢,因为查询优化器不会生成参数数量的统计信息。一旦你点击了其中的一些(10、20?),最好使用临时表变量,加载其中的值并使用连接 - 因为如果你正确定义它,该表变量实际上确实会生成统计信息
标签: sql-server sql-server-2008