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返回所有列的速度快如此之多,通过以上默认使用索引、强制使用聚集索引、强制使用非聚集索引我们知道对于对于检索所有列结果集使用主键的聚集索引是最佳选择。
总结
通过上述演示我们知道即使创建了聚集索引也不会利用聚集索引检索结果,有时候使用非聚集索引比使用聚集索引会提供更好的性能,当然不能一概而论,二者皆有使用场景。当每一次面试时谈到数据库优化时,第一想到的是索引,然后就没有下文了,如何使用索引,怎么在不同场景使用不同的索引呢?在任何数据库中索引一直都是一个很大的话题且是一个复杂的内容,复杂的内容皆是由简单堆积而成,我们必须如蜗牛般去慢慢研究,抽茧剥丝,最终才会有一个好的效果。简短的内容,深入的理解。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持开心学习网!
- mysql数据库基础练习(最全50个Mysql数据库查询练习题)
- mysql的decimal类型(MySQL数据类型DECIMAL用法详解)
- mysql必背知识点高级(MySQL 8.0 Online DDL快速加列的相关总结)
- sqlserver索引实例(SQL Server索引的原理深入解析)
- mysql中如何设置多个主键(Mysql 增加主键或者修改主键的sql语句操作)
- sqlserver触发器编写(SQLSever中的触发器基本语法与作用)
- sql语句delete的用法(SQL删除语句DROP、TRUNCATE、 DELETE 的区别)
- sqlcount函数转化为数值型(SQL判断是否"存在",还在用 count 操作?很耗时的!)
- docker怎么连接mysql(docker如何安装mysql)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)
- sqlserver模糊查询使用定义的字段(SQL Server模糊查询的常见方法总结)
- mysql怎么设置存储记录(MySQL 的一行记录是怎么存储的?)
- mysql时间戳和datetime对比(mysql中 datatime与timestamp的区别说明)
- 织梦源码安装数据库怎么填(Mysql修改端口号 织梦DedeCMS设置教程)
- python操作sql server数据库(Python 数据库操作 SQLAlchemy的示例代码)
- sqlserver安装与使用教程(SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置图文教程详解)
- ()
- 书法欣赏 宋.志南诗《绝句》(宋.志南诗绝句)
- 每周一首古诗 《绝句》(每周一首古诗绝句)
- 蓝色代表什么(蓝色代表什么性格的人)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
热门推荐
- laravel自定义使用方法(Laravel使用Queue队列的技巧汇总)
- mysql的7种索引(浅入浅出 MySQL 索引)
- Oracle TO_CHAR的使用
- 使用canvas的好坏(关于canvas绘制模糊问题的解决方法)
- VS中使用Unit Test Generator进行单元测试
- css选择器常用的用法和说明(针对IE6的一些CSS Hack编写时的注意点小结)
- php各种绕过姿势(php面试实现反射注入的详细方法)
- mysql修改表结构的关键字(查看修改MySQL表结构命令)
- 怎么把数据库备份到阿里(阿里云数据库备份DBS与自建备份系统有什么优势?)
- pythonrequests框架实例(Python requests模块实例用法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9