- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(SQL中的Hints
浅谈SQL Server 2008中的Hints(提示)-三种不同类型的联接提示(Join Hints)、查询提示(Query Hints)、表提示(Table Hints) SQL Server 2008中SQL应用系列--目录索引 SQL Server的系统查询过程负责在SELECT查询执行时候产生查询执行计划。SQL Server会“智能”地选择一个高效计划来取代低效的一个。大多数时候,SQL Server会把这份工作干得很棒。但正如有些人所担忧的,SQL Server并不是万能的,有时候,我们通过查询执行计划、表统计信息、支撑的索引及其他因素,研究性能之后,发现查询优化器选择的执行计划没有达到预期的效果,或者说,查询优化器做出了错误的选择。此时我们可能需要使用Hints(提示)来覆盖SQL Server查询优化器决定的过程。 看MSDN(/en-us/library/ms187713%28v=sql.105%29.aspx),Hints(提示)是指定的强制选项或策略,由 SQL Server 查询处理器针对 SELECT、INSERT、UPDATE 或 DELETE 语句执行。提示将覆盖查询优化器可能为查询选择的任何执行计划。 使用Hints之前,我有义务提醒一下各位读者: ■SQL Server绝大多数情况下会做出正确的选择,即便使用的Hints短期内有效,但随着数据库内容的更改,使用的查询计划反而可能更高效,但此时因为Hints更霸道,SQL Server并不会“自作主张”地使用优化器。 ■SQL Server发布补丁后,有效的Hints也可能会改变。 本文将要的介绍的内容包括:SQL Server三种不同类型的Hints:联接提示(Join Hints)、查询提示(Query Hints)、表提示(Table Hints),包括SQL Server2008中引入的提示ForceSeek,可以用它将索引查找来替换索引扫描。 1、使用联接提示(Join Hints) 官方解释:联接提示用于指定查询优化器在两个表之间强制执行联接策略。(/zh-cn/library/ms173815%28v=sql.105%29.aspx) 用法:join_hint ::= { LOOP | HASH | MERGE | REMOTE } 联结提示会强制查询优化器来使用你命令的方式联结表,通过内部JOIN操作来实现。可用的联结提示: 代码演示:/********* 使用Hints联结 ***************//********* 3w@ 邀月 ************/USE TestDb2GOIF NOT OBJECT_ID(HintsDemo,U) IS NULLDROP TABLE HintsDemoGOIF NOT OBJECT_ID(HintsDemo2,U) IS NULLDROP TABLE HintsDemo2GO----创建测试数据表CREATE TABLE dbo.HintsDemo (HID int ,HTitle Nvarchar(50))GOCREATE TABLE dbo.HintsDemo2 (HID2 int ,HID int)GO----插入20条数据INSERT HintsDemo(HID,HTitle)VALUES ( cast(rand()*10 AS INT),replicate(X,cast(rand()*25 AS INT)) )GO 20--重复该语句20次,邀月注INSERT HintsDemo2SELECT TOP 10 cast(rand()*10 AS INT), HID from HintsDemoGO 2--重复该语句2次,邀月注--此时两个表各有20条记录SELECT * FROM HintsDemoSELECT * FROM HintsDemo2SET SHOWPLAN_XML ONGOSELECT h.HID,h.HTitle,d.HID2FROM HintsDemo hINNER JOIN HintsDemo2 d ONh.HID = d.HIDGOSET SHOWPLAN_XML OFFGO?下面使用Hash JoinSET SHOWPLAN_XML ONGOSELECT h.HID,h.HTitle,d.HID2FROM HintsDemo hInner HASH JOIN HintsDemo2 d ONh.HID = d.HIDGOSET SHOWPLAN_XML OFFGO? 2、使用查询提示(Query Hints) 官方解释:在查询语句的持续时间内,查询提示优先于查询优化器的默认行为。您可以使用查询提示指定受影响的表的锁定方法、一个或多个索引、一个查
文档评论(0)