关于SQL Server2005中的Bookmark Lookup一点疑惑!!!

如一宝宝 如一宝宝 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

--创建表
if OBJECT_ID('news') is not null
drop table news
create table news
(
news_id bigint primary key,
news_content varchar(8000),
news_datetime datetime
)



--为时间列建立索引
create index idx_datettime on news(news_datetime)


如上代码所示,创建一个新闻表news,其中有3列分别是ID,新闻内容,添加时间;其中news_id为默认的聚集索引,手动为“添加时间”列加上了非聚集索引;
我在书上看到非聚集索引只能返回索引关键列,也就是说我只查询时间列是高效的,如下:

select news_datetime from news
where news_datetime between '2010-08-18 16:03' and '2010-08-18 16:04'


如果我一次性查询所有的列用select *,SQL Server的执行计划会直接用聚集索引扫描所有的行,这个时候news_datetime的索引是不是就没什么效果了,下面是执行计划的IO情况:

select * from news
where news_datetime between '2010-08-18 16:03' and '2010-08-18 16:04'
表'news'。扫描计数1,逻辑读取23045 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,


因为非聚集所以默认情况下,都包含本表的聚集索引列,也就是说我用news_datetime作谓词查找,只查询news_id 是索引查找,而不是扫描,然后我突发奇想写下这样的SQL:

select * from news where news_id in(
select news_id from news
where news_datetime between '2010-08-18 16:03' and '2010-08-18 16:04')

表面上看多了个嵌套,但我惊奇的发现尽管这条SQL长,看似复杂,但是IO情况却比上面要好,如下:
表'news'。扫描计数2,逻辑读取19016 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,

最后我看执行时间的确下面比上面的好快不少。虽然效率差别不大,但是心中有疑惑,还忘各位SQL大人帮忙看下;区别到底在哪里,他们内在的执行的机制和顺序有何不同!
...全文

相关推荐

解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)

本文主要讲解索引性能优化,着重对Bookmark Lookup、RID Lookup、Key Lookup三者进行移除的实现进行解析,以此来提高查询性能。希望对大家有所帮助

weixin_38674124

SQLServer索引基础知识----聚集索引,非聚集索引[归纳].pdf

SQLServer索引基础知识----聚集索引,非聚集索引[归纳].pdf

czq131452007

CO-043A Released SHIPPING AND HANDLING TRAY FOR LP5 SOCAMM2 MODULE.rar

CO-043A Released SHIPPING AND HANDLING TRAY FOR LP5 SOCAMM2 MODULE.rar

phyit

阴影蜘蛛的判定与处理 vue

阴影蜘蛛的判定与处理 vue

菜C++鸡java

硕士复现燃料电池供氢系统建模及控制策略Simulink仿真(附带说明PPT+参考文献+复现模型+实物源码)

内容概要:本文围绕燃料电池供氢系统的建模与控制策略展开,依托Simulink仿真平台构建了完整的系统动态模型,深入研究了供氢过程的关键动态特性及先进控制方法的设计与实现。内容涵盖系统建模流程、控制策略设计、仿真验证与结果分析,并配套提供详细的说明PPT、参考文献、可复现的仿真模型及实物源码等丰富资源,便于读者系统性地理解与复现研究成果。研究重点在于优化供氢压力、流量与响应速度,提升燃料电池系统的运行效率、稳定性与动态适应能力,对新能源领域的工程实践与学术研究具有重要参考价值。; 适合人群:具备自动化、电气工程、能源动力或控制科学等相关专业背景,正在从事新能源技术、氢能系统或仿真实验研究的硕士研究生、博士生及科研人员。; 使用场景及目标:①掌握燃料电池供氢系统的核心建模方法与Simulink高级仿真技巧;②学习并复现已有先进控制策略,进一步开展系统优化与创新设计;③为撰写高质量学术论文、完成学位课题或工程验证提供完整的理论支持与技术方案。; 阅读建议:建议结合所提供的PPT讲解、参考文献与Simulink模型逐步操作,注重理论分析与仿真实践的深度融合,在仿真过程中主动调试参数、观察动态响应,以深刻理解系统行为与控制机理,最大化学习与研究成效。

抬头望远方
评论 1
收藏 已收藏
分享
返回顶部
如一宝宝
疑难问题 22,298 成员 121,727 内容