sqlrver执行计划(executionplan)介绍

更新时间:2023-05-22 08:28:31 阅读: 评论:0

sqlrver执⾏计划(executionplan)介绍
⼤纲:⽬的介绍sql rver 中执⾏计划的⼤致使⽤,当遇到查询性能瓶颈时,可以发挥⽤处,⽽且带有⽐较详细的学习⽂档和计划,阅读者可以按照我计划进⾏,从⽽达到对执⾏计划⼀个⽐较系统的学习。
1. 什么是sql rver 执⾏计划
2. sql rver 执⾏计划的⼤致使⽤
3. 学习计划
1.什么是sql rver 执⾏计划
  执⾏计划是查询优化器对我们提交的T-SQL查询请求的最有效⽅法的的执⾏结果,执⾏计划可以告诉我们查询是如何执⾏的,当数据库查询进⾏故障排查时,使⽤执⾏计划是最主要的⽅法。
  执⾏计划的展现⽅式有三种,视图型,⽂本类型,xml类型。
2.sql rver的⼤致使⽤下⾯是⼀个⼩例⼦
  选中需要查询数据,右键出现 Display Estimated Execution Plan,或者使⽤快捷键Ctrl + L,可以马上
查看执⾏计划
结果:
右键放在查询计划图标上⾯可以看到下⾯详细信息,命中的索引,I/O 消耗信息,CPU 消耗,查询结果⾏数,⾮常直观的可以看出各种参数
3.学习路线
下⾯是我认为写的⽐较好的⼀些实战介绍:
梦见跳楼这仅仅是⼀个⼊门,如果有感兴趣的⼈,可以⾃⼰认真阅读链接⽂章。
前期准备:
create table Employee (
ID int not null primary key,
Name nvarchar(4),
Credit_Card_ID varbinary(max)); --- ⼩⼼这种数据类型。            go
说明:本表上的索引,都会在创建下⼀个索引前删除。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
操作 1、
创建聚集索引
119宣传日
⽅法 1、
alter table table_name add constraint cons_name priamry key(columnName ASC|DESC,[.....]) with (drop_existing = on);
alter table Employee
add constraint PK_for_Employee primary key clustered (ID);
go
这个是⼀种特别的⽅法,因为在定义主键的时候,会⾃动添加索引,好在加的是聚集索引还是⾮聚集索引是我们⼈为可以控制的。
通过sp_helpindex 可以查看表中的索引
execute sp_helpindex @objname = 'Employee';
go
注意、
这个索引是⽆法删除的,不信! 你去删⼀下
跳开头的四字成语drop index Employee.PK__Employee__3214EC277D95E615;
go
⽅法 2、
create clustered index ix_name on table_name(columnName ASC|DESC[,......]) with (drop_existing = on);⽅法
create clustered index ix_clu_for_employee_ID on Employee(ID);
go
查看创建的索引
医生节操作 2、
创建复合索引
create index ix_com_Employee_IDName on Employee (ID,Name)with (drop_existing = on);
这样就算是创建⼀个复合索引了,不过脚下的路很长,我们看下⼀个复合索引的例句:
开斋节是哪个民族create index ix_com_Employee_IDCreditCardID on Employee(ID,Credit_Card_ID);
看到这句话,你先问⼀下⾃⼰它有没有错!
可以发现它错了,varbinary是不可以建索引的。
操作 3、
创建覆盖索引
create index index_name on table_Name (columnName ASC|DESC[,......]) include(column_Name_List)with
(drop_existing = on);
create index ix_cov_Employee_ID_Name on Employee (ID) include(Name);
go
⾸先,覆盖索引它只是⾮聚集索引的⼀种特别形式,下⽂说的⾮聚集索引不包涵覆盖索引,当然这个约定只适⽤于这⼀段话,这样做的
⽬的是为了说明各中的区别。
⾸先:
1、⾮聚集索引不包涵数据,通过它找到的只是⽂件中数据⾏的引⽤(表是堆的情况下)或是聚集索引的引⽤,SQL Server
要通这个引⽤去找到相应的数据⾏。彩虹糖
2、正因为⾮聚集索引它没有数据,才引发第⼆次查找。
3、覆盖索引就是把数据加到⾮聚集索引上,这样就不需要第⼆次查找了。这是⼀种以空间换性能的⽅法。⾮聚集索引也是。
只是做的没有它这么出格。
操作 4、
创建唯⼀索引
create unique index index_name on table_name (column ASC|DESC[,.....])with (drop_existing = on);
正如我前⾯所说,在创建表上的索引前,我会删除表上的所有索引,这⾥为什么我要再说⼀下呢!因为我怕你忘了。⼆来这个例⼦⽤的到它。
⽬前表是⼀个空表,我给它加两⾏数据。
inrt into Employee(ID,Name) values(1,'AAA'),(1,'BBB');
这下我们为表加唯⼀索引,它定义在ID这个列上
create unique index ix_uni_Employee_ID on Employee(ID);
理想解释
go -- 可以想到因为ID有重复,所以它创建不了。
结论 1、 如果在列上有重复值,就不可以在这个列上定义,唯⼀索引。
下⾯我们把表清空: truncate table Employee;
贴纸的英文
接下来要做的就是先,创建唯⼀索引,再插⼊重复值。
create unique index ix_uni_Employee_ID on Employee(ID);
go
inrt into Employee(ID,Name) values(1,'AAA'),(1,'BBB');
go

本文发布于:2023-05-22 08:28:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/729745.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   计划   数据   聚集   创建
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图