T-SQL备忘(5):查看执行计划

先理解几个概念:表扫描、聚集索引扫描、聚集索引查找、索引扫描、书签查找。

【查看执行计划】

在理解概念之前先得知道如何查看执行计划—Ctrl+L。如下图:

注:SQL Server的执行计划是从右向左看的。

理解几个概念】

1.表扫描(Table scan):发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次。

 select * from T_UserInfo

查看执行计划如下:

2.聚集索引扫描(Clustered Index Scan):发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好

创建聚集索引:

 CREATE CLUSTERED INDEX INDEX_Userid  ON T_UserInfo (Userid)

  

因为给表加了聚集索引所以即使是查找全部数据,它也会使用聚集索引查找。

3.聚集索引查找(Clustered Index Seek):扫描聚集索引中特定范围的行。

 select * from T_UserInfo where Userid=‘ABCDE12EF‘

注:前提是where后面的查找条件有聚集索引列。也就是当且仅当where后面的条件包含聚集索引的时候。

4.索引扫描(Index scan):整体扫描非聚集索引。

创建非聚集索引:

CREATE NONCLUSTERED INDEX IX_Name ON T_UserInfo(UserName)
 select UserName from T_UserInfo ---只要不是全部的列 *

注:当在非聚集索引中并非覆盖和包含所需全部的列时,SQL Server会利用聚集索引找到数据。

5.书签查找(Bookmark Lookup)

我们知道如果表没有聚集索引的话 select * from T_UserInfo 会使用表扫描,有的话则会使用聚集索引扫描。但是如果有聚集索引机会使用聚集索引扫描。

 select * from T_UserInfo with(index (IX_Name)) where UserName=‘李100‘

这里借用一句:上面的过程可以理解为:首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找。

时间: 2024-10-26 15:03:36

T-SQL备忘(5):查看执行计划的相关文章

如何查看执行计划

SSMS里的设置方法就不多说了上图看 如何以SQL命令的方式查看执行计划: 一.查看实际的执行计划 方式一,查看文本格式 SET STATISTICS PROFILE ON; SET STATISTICS PROFILE OFF; 方式二.查看XML格式(可点击转到图形界面查看,因为类似全屏,界面比较大,对于比较大的执行计划会有用些) SET STATISTICS XML ON; SET STATISTICS XML OFF; 二.查看估计的执行计划 方式一,查看全部 SET SHOWPLAN_

Oracle数据库查看执行计划

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明. 一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗

创建跟踪和查看执行计划需要的权限

多看书,多积累,温故知新.只有要用的时候,才会发现知识欠缺.不要说知道有这么回事,要很有底气的回答应该怎么做.查看跟踪和查看执行计划需要怎样的权限?sysadmin/db_owner肯定可以,但不应该给这么大的权限.创建登录名 --create login use master go create login TracePlan with password='123qwe' go 创建用户 --create user use AdventureWorks2008R2 go create user

Postgresql,常用sql备忘

1.查看所有表的名称 Postgresql,greeplum,如果数据库在几千里以外,数据量巨大,网速不好,使用pgadmin客户端,那么你大部分时间都要浪费在等在中... 使用pgadmin的query是个不错的选择,但是,怎么才能知道表名呢,这丫真没mysql好用—— SELECT tablename FROM pg_tables where tablename not like 'gp%' and tablename not like 'gp%' and tablename not lik

简单对比查看执行计划的两种方法EXPLAIN PLAN 和 AUTOTRACE

EXPLAIN PLAN 和 AUTOTRACE 都可以查看执行计划. 值得一提的是:前者只是优化器通过读取数据字典的统计信息做出'最佳'访问路径判断,并没有真正去执行语句:后者是实际去执行了SQL语句,同时把访问记录数.执行计划.统计信息等打印出来. 下面粘出实验结果加以说明,注意对比两者的耗时: <p>SQL> CONNECT /AS SYSDBA Connected.</p><p>SQL> SET LINESIZE 300; SQL> SET T

查看执行计划

1.工具介绍 总结:单纯估算用autotrace,真实调优用DBMS_XPLAN带参数 1.explain 因为绑定变量的原因,这个只能是估算 explain plan for select 3+5 from dual; select * from table(dbms_xplan.display()); select * from table(dbms_xplan.display(table_name=>'PLAN_TABLE',statement_id=>null,format=>'

如何查看执行计划以及执行计划的准确性

下面的执行计划是怎么打印出来的,很多朋友还是不知道.其实语句只有三条: explain plan for 你要查看的SQL语句; commit; select * from table(dbms_xplan.display); -----分割线---------------------------------- 先告诉大家一个原则,看执行计划的时候,从第一行开始向右下看,一直到最右边.如果有并列的,那么先上再下.如果没并列,右边的先执行. 闲话少说,先上图吧: 这是一个简单的SQL的执行计划,这

oracle如何查看执行计划

1.在PL/SQL Developer中得到一个SQL的执行计划 输入想要查看执行计划的目标SQL,再按一下快捷键F5就可以了.2.explain plan 命令 explain plan for + 目标SQL select * from table(dbms_xplan.display)3. DBMS_XPLAN 包 1) select * from table(dbms_xplan.display_cursor(null,null,'advanced')) 它用于在SQLPLUS中查看刚刚

Oracle 查看执行计划问题

一.描述在查看执行计划测试的过程中遇到使用dbms_xplan.display无法查看执行计划,发现是因为之前在测试的过程中打开了set autot on,关闭后(set autot off) ,执行计划可以正常显示. 二.操作过程 SQL> SQL> explain plan for select count(*) from tt; Explained. Elapsed: 00:00:00.00 SQL> set lines 200 pages 2000 SQL> select