SQL Server执行计划

一、数据查询部分

1、 看到执行计划有两种方式,对sql语句按Ctrl+L,或按Ctrl+M打开显示执行计划窗口每次执行sql都会显示出相应的执行计划

2、 执行计划的图表是从右向左看的

3、 SQL Server有几种方式查找数据记录

[Table Scan] 表扫描(最慢),对表记录逐行进行检查

[Clustered Index Scan] 聚集索引扫描(较慢),按聚集索引对记录逐行进行检查

[Index Scan] 索引扫描(普通),根据索引滤出部分数据在进行逐行检查

[Index Seek] 索引查找(较快),根据索引定位记录所在位置再取出记录

[Clustered Index Seek] 聚集索引查找(最快),直接根据聚集索引获取记录

(如果有些sql执行很慢可以看一下执行计划是否包含太多“扫描”操作,如果有可以考虑为这些字段建立索引,建立索引切记不要再经常有更新操作的字段上建立,每次更新都会导致重建索引的操作,也会影响性能,0或1这种标识状态的字段因为大部分数据都是一样的建立索引也没有什么作用)

(索引就两种,1是聚集索引,2个非聚集索引,聚集索引每张表只能有一个,非聚集索引每张表可以有多个,主键Id就是典型的聚集索引,聚集索引是顺序排列的类似于字典查找拼音a、b、c……和字典文字内容顺序是相同的,非聚集索引与内容是非顺序排列的,类似字典偏旁查找时,同一个偏旁‘马’的汉字可能一个在第10页一个在第100页)

4、  

⑴没有主键的表查询[表扫描]

⑵有主键的表查询[聚集索引扫描]

⑶建立非聚集索引的表查询[索引扫描+书签查找]

书签查找:通过非聚集索引找到所求的行,但这个索引并不包含显示的列,因此还要额外去基本表中找到这些列,所以要进行键查找,如果基本表在堆中则Key Lookup会变成RID查找,这两个查找统称为书签查找。

⑷建立非聚集索引并把其他显示列加入索引中[索引查找]

⑸建立非聚集索引并把其他显示列加入索引中并把聚集索引列当作条件[聚集索引查找]

 

 

性能优化,提升效率,资源优化配置,压榨系统性能,OOM,CPU,GC,JVM

1.方法内联
方法中的对象大部分是朝生夕死

栈(生命周期结束回收)--》堆(GC)


2.SQLServer技巧-

强大的插件 Redgate SQL Toolbelt,sql monitor,redgote deploy

www.Redgate.com


4. sql pretty printer

转载:
https://blog.csdn.net/zy925165472/article/details/87164096

https://blog.csdn.net/timchen44

https://www.cnblogs.com/taiyonghai/p/5594826.html

 

5.优化方法:

   5.1 添加索引:快速定位数据查找

   5.2 in 查询用临时表,表值参数

   5.3. 多表多条件left join,先执行inner join 根据输入条件筛选数据后在left 其他表,减少查询数据,第1次过滤调大部数据;

   5.4.尽量减少回主表查询的字段,节约查询时间,少量字段可以添加包含列,大量字段可以先inner joion,在left join,或根据分页获取100条再left join

5.5.查询条件 WHERE a.PayTime >= DATEADD(DAY, -30, GETDATE()) AND a.PayTime< GETDATE()
最好写成变量或明文:WHERE a.PayTime >= ‘2021-12-06 17:15:00’ AND a.PayTime< ‘2022-01-05 17:15:00’, 函数不会走索引;

5.6. 临时表建主键,建索引在联合查询,速度会很快;

5.7. 将联合查询的结果集放到临时表里,在和表Join 查询,查询筛选的主要条件需建索引。

5.8 select count() 留一个id,去掉其他多余的查询字段和left join 查询(注意业务需要的left 表中的重复行,主表1个id对应left表中多行,会把多行查询出来)

5.9多表join,通过把查询列里不同表的字段注释后,看查询速度,看执行计划走的索引,添加包含索引后,来优化整个慢查询

 

----------建立索引的原则----------------------------

DB 优化:
客户端-->协议层--》执行计划
数据库是把东西有序放好,还能随时找到,在硬盘上,是一个应用程序
索引:page数据页,IAM page ,index page 索引页

建立索引的原则:
1.主键必须建立索引(推荐数值主键,性能最高)
2.外键列也要索引
3.经常查询的建立索引
4.经常在where里面
5.order by group by distinct

执行计划:
1.table scan 全表扫描
2.cluster index scan
3.index scan

常规的sql 优化建议
1.避免对列的计算,任务形式的都要避免
2.In 查询,or 查询,索引会失效,
3.in 换exists
not in 不要用,不走索引
4. is null ,is not null 都不走索引;
5.<> 也不走索引,可以拆分成 > 和<
6. join时,连接越少,性能越高

 

SQL Server执行计划中图标的功能说明

https://blog.csdn.net/TimChen44/article/details/117901370

 

[转] 50种方法巧妙优化你的SQL Server数据库

https://www.cnblogs.com/pctzhang/archive/2010/04/08/1706984.html

posted @ 2021-11-09 22:23  大树2  阅读(1498)  评论(0编辑  收藏  举报