sqlserver索引介绍(浅析SQL Server的聚焦使用索引和查询执行计划)
sqlserver索引介绍
浅析SQL Server的聚焦使用索引和查询执行计划前言
上一篇《浅析SQL Server 聚焦索引对非聚集索引的影响》我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解。
透过索引来看查询执行计划
我们首先来看看第一个例子
1、默认使用索引
USE TSQL2012 GO SELECT orderid FROM Sales.Orders SELECT * FROM Sales.Orders
上述我们看到第2个查询的所需要的开销是第1个查询开销的3倍,当然其中也涉及到第1个查询只是返回一列而第2个查询返回所有列,这其中也耗费一小部分性能。对于SQL Server查询而言,它内部会利用索引来走最短的路径获取最优的性能。我们能够注意到即使将orderid作为主键,但是返回数据并不是采用的主键所自动生成的聚集索引而是非聚集索引。相信有很多人主观上觉得返回主键而且查询没有查询条件应该是走主键的聚集索引,但是有时候事实并非如此,上一篇我们已经讨论过这个问题,不再叙述。在第2个查询中利用*返回数据则是利用主键的聚集索引。
2、强制主键使用聚集索引
强制使用索引我们利用With(index(索引名称))来创建,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(PK_Orders)) SELECT * FROM Sales.Orders WITH(INDEX(PK_Orders))
我们从上可以看出默认返回主键列时利用非聚集索引,这里我们强制让它走聚集索引,而对于第2个查询就不用说了,此时二者的开销是相当的。
3、强制使用非聚集索引
我们继续往下看,对查询强制使用非聚集索引查找,如下:
USE TSQL2012 GO SELECT orderid FROM Sales.Orders WITH(INDEX(idx_nc_custid)) SELECT * FROM Sales.Orders WITH(INDEX(idx_nc_custid))
由上可见,二者开销区别之大,对于使用非聚集索引查询1返回单列,而查询2返回所有列的速度快如此之多,通过以上默认使用索引、强制使用聚集索引、强制使用非聚集索引我们知道对于对于检索所有列结果集使用主键的聚集索引是最佳选择。
总结
通过上述演示我们知道即使创建了聚集索引也不会利用聚集索引检索结果,有时候使用非聚集索引比使用聚集索引会提供更好的性能,当然不能一概而论,二者皆有使用场景。当每一次面试时谈到数据库优化时,第一想到的是索引,然后就没有下文了,如何使用索引,怎么在不同场景使用不同的索引呢?在任何数据库中索引一直都是一个很大的话题且是一个复杂的内容,复杂的内容皆是由简单堆积而成,我们必须如蜗牛般去慢慢研究,抽茧剥丝,最终才会有一个好的效果。简短的内容,深入的理解。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持开心学习网!
- sql server入门教程(SQL Server AlwaysOn读写分离配置图文教程)
- django mysql设置(Django框架使用mysql视图操作示例)
- SQL SERVER与MySQL数据类型的对应关系
- mysql触发器如何创建(MySQL 触发器的使用和理解)
- sql设置注释(SqlSever 注释符 单行注释与多行注释)
- mysql触发器怎么添加(MySQL触发器的使用场景及方法实例)
- sql server中策略管理
- mysql中json的支持(MySQL中json字段的操作方法)
- mysql添加注释视图(mysql创建表添加字段注释的实现方法)
- idea的mysql如何连接(在IntelliJ IDEA中使用Java连接MySQL数据库的方法详解)
- docker 增大mysql连接数(docker中修改mysql最大连接数及配置文件的实现)
- mysql经典问题(MySQL null的一些易错点)
- mysql 高级用法(MySQL实现replace函数的几种实用场景)
- mysql恢复数据库(MySQL 两种恢复数据的方法)
- mysql中的默认mysql数据库作用(MySQL安装后默认自带数据库的作用详解)
- mysql 8.0.22 winx64安装配置图文教程(mysql 8.0.22 winx64安装配置图文教程)
- 这8种耐阴植物,营造阴生植物花境,也是一个不错的选择(营造阴生植物花境)
- 览邦G08 Plus SMART WATCH 测评⑱ 全独立这才是智能手表该有的样子(览邦G08PlusSMART)
- 荣耀手表 GS 3 真机亮相 不支持无线充电(荣耀手表GS3)
- 通过体温就能为智能手表充电 原来是用NASA在空间站用的黑科技(通过体温就能为智能手表充电)
- 智能手表兼容Windows和Android 无需充电挑战苹果(智能手表兼容Windows和Android)
- 一天一冲也算表 麦步,一款待机 21 天的智能手表体验评测(一天一冲也算表)
热门推荐
- ASP.NET记录错误日志的方式有哪些
- windows下mysql密码重置(Windows10系统下Mysql8.0.13忘记root密码的操作方法)
- PowerDesigner逆向生成pdm
- css如何使用z-index(CSS中的z-index属性基本使用教程)
- php开发详细步骤(php源码的安装方法和实例)
- html5定位教学(Html5 webview元素定位工具的实现)
- mongodb query查询
- python编程开发环境步骤(python开发准备工作之配置虚拟环境非常重要)
- python爬取在线评论(Python爬虫实现爬取百度百科词条功能实例)
- mysql各种锁详解(MySQL 查看事务和锁情况的常用语句分享)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9