首页 > 数据库 >sqlserver笔记

sqlserver笔记

时间:2024-05-05 21:55:44浏览次数:20  
标签:语句 -- 扫描 sqlserver 笔记 查询 索引 where

明确的性能低的定义:在现有资源还没有达到最大吞吐量的前提下,系统如果不能满足合理的预期表现。

最小化每个SQL的响应时间;
合理增加吞吐量;
减少网络延时
优化磁盘IO、CPU

能够协调、平衡的运行,合理的响应外部的请求,实现资源利用的最大化。


影响性能的常见因素:
1.数据库结构的设计
--了解业务
--优先考虑第三范式设计:字段冗余,避免多表关联的手段
适当冗余,非常适合查询情况多,更新情况少的情景;
--表关联尽可能少,使用简单SQL语句,避免过多的表关联
--坚持最小原则,尽可能小的字段类型
--适当的使用约束,从安全方面考虑

2.SQL语句的编写

3.数据文件的编写
TempDB系统库,是个全局资源,建议放在独立的磁盘,减少分配争用


4.硬件资源


Sql Server执行计划分析
SQL语句 --语法分析--绑定--优化--执行--返回结果

执行计划中,开销比例高的地方去做优化,会达到很好的优化效果;

 

Server=localhost\SQLEXPRESS;Database=master;Trusted_Connection=True;

C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Log\20240505_191041


阻塞运算符 sort,需要很多内存去存储数据,再操作;

非阻塞运算符


如何编写健壮的SQL语句

不含聚集索引的表叫堆表;
包含聚集索引的表叫聚集索引表;

扫描运算符:表扫描、聚集索引扫描、非聚集索引扫描

表扫描指对堆表的全局扫描


聚集索引扫描

非聚集索引扫描:查询的数据包含在定义好的索引中,索引中以及包含数据,也被称为覆盖索引。 Index Scan Noncluster


扫描操作是性能最大杀手,1.需要大量的磁盘IO 2.消耗许多内存存储相关数据 3.当数据库缓存空间不足时,会应用相应的数据淘汰算法,清理缓存中的数据,填充新查找的数据;如果频繁的大量数据扫描,会导致缓存数据频繁交替。


查找:通过索引去定位数据;

聚集索引查找:

非聚集索引查找
键查找是一种标签查找,指使用了非聚集索引的语句中,用于查询不包含在当前索引中的字段。


RID Loop 行ID查找 【指表中,没有索引,连主键都没有的】

【没有索引,或索引范围没有覆盖,导致的】

--健壮的SQL语句

避免:select *,减少网络开销,更好的利用索引覆盖
限制返回结果集的大小,比如分页,防止扫描操作带来的大量IO和内存的使用


orderby 参与排序操作的数据量的大小,避免对大批量数据进行排序
对中间数据有影响TempDB数据库【存储查询过程中产生的中间数据】
如果对2亿数据进行排序,这些数据占内存5g,那么就需要5g的tempDB磁盘,而tempDB是公共资源,tempDB磁盘阻塞,会影响整个数据库的性能;

group by distinct 也是一样的

where子句:
--是否有合适的索引
--字段是是否存在函数计算
--结果集是否过大
--是否仅查询出需要的字段

语句的优化其实就是合理索引的选择。

覆盖索引,包含了当前查询语句所使用的所有字段信息
需要明确从什么表中,取出什么数据,合理利用索引


SARG写法,可以高效使用索引的写法

非SARG的写法有:
--where 左边出现标量函数 where UPPER(列名)='A' ,导致索引失效
可以改成 where (列名=‘A’ or 列名=‘a’)
where 列-1=某个值 改成 where 列=某个值+1


LEFT(列,3)=‘ABC’ 改成 列 like ‘ABC%’

DateAdd(day,7,列)>getdate() 改成 列>dateadd(day,-7,getdate())

隐式类型转换


子查询 嵌套在查询里的查询语句,出现在where子句,select某个字段表达式中,
尽量出现在where子句中,子查询数量不超过3个,整个语句涉及的表不超过5个;
避免在子查询中对大数据集进行汇总或排序操作;
尽量缩小子查询中可能返回的结果集
尽量使用确定性的判断符号,=,in exists,避免any,some,all


In exists 查询器会转换成inner join

not in not exists 查询器会转换成left join

索引解析

索引最能提升性能;
性能(查询);维护数据一致性;
快速定位到就得数据行;


索引的种类
索引体积=》索引的列数、列的数据类型、数据量

索引是把双刃剑,

标签:语句,--,扫描,sqlserver,笔记,查询,索引,where
From: https://www.cnblogs.com/hcy-zyy/p/18173929

相关文章

  • 网络流学习笔记
    1.概述网络指的是一类特殊的有向图G=(V,E),与一般有向图不同的是有容量和源汇点对于网络G=(V,E),流是一个从边集E到整数集或实数集的函数,满足如下性质容量限制:对于每条边,该边流经的流量不得超过该边的容量流守恒性:除源汇点外,其余任何点的净流量为0,其中,我们定义节点u的净流......
  • Redis基础篇笔记
    一、Redis入门1.认识NoSQL1.1 什么是NoSQLNoSQL最常见的解释是"non-relational",很多人也说它是"NotOnlySQL"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于......
  • 【学习笔记】初次学习斜率优化的代码及笔记
    include<bits/stdc++.h>usingnamespacestd;intn,m;intdp[10000],s[6100],q[10000];intslope(intj,intk){intx=(dp[j]-dp[k]+s[j]s[j]-s[k]s[k])/(s[j]+s[k]);returnx;}//求斜率intmain(){while(scanf("%d%d",&n,&m)!=EOF){for(in......
  • 集合幂级数学习笔记
    基本操作集合并卷积集合幂卷积定义为:给定两个集合幂级数\(F,G\),计算集合幂级数\(H\)满足:\[\begin{aligned}h_S=\sum_{L\subset2^U}\sum_{R\subset2^U}[L\cupR=S]f_Lg_R\end{aligned}\]我们考虑用类似于FFT的方式,把\(f,g\)按某种线性变换后,然后把问题变成点乘。......
  • 网课-博弈论学习笔记
    Nim游戏\(n=2\)的时候可以用一个巧妙的方法证明:如果两堆石子一样多,则后手可以通过在另一堆上一直模仿先手的行为获胜;如果两堆石子不一样多,则先手可以在第一次取时把两堆变成一样多。结论中出现异或的原因(异或的定义为):\[a\oplus0=a\]\[a\oplusa=0\]\[a\oplusb=......
  • FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
    ​同步播放音视频的时候,《FFmpeg开发实战:从零基础到短视频上线》一书第10章的示例程序playsync.c采取一边遍历一边播放的方式,在源文件的音频流和视频流交错读取的情况下,该方式可以很好地实现同步播放功能。但个别格式的音频流和视频流是分开存储的,前面一大段放了所有的音频帧,后......
  • pde复习笔记 第一章 波动方程 第六节 能量不等式、波动方程解的唯一性和稳定性
    能量不等式这一部分需要知道的是能量的表达式\[E(t)=\int_{0}^{l}u_{t}^{2}+a^{2}u_{x}^{2}dx\]一般而言题目常见的问法是证明能量是减少的,也就是我们需要证明\[\dfrac{d}{dt}E(t)\le0\]在计算\(\dfrac{d}{dt}E(t)\le0\)的时候一定会用的题目给的方程条件去凑微分,还会......
  • 计算理论导论笔记
    计算理论导论笔记正则语言和自动机(RegularLanguagesandAutomata)DFA确定性有限状态自动机(DeterministicFinitestateAutomata/DFA)由一个五元组\((Q,\Sigma,\delta,q_0,F)\)唯一确定。\(Q\)为状态集合。\(\Sigma\)为字符集。\(\delta:Q\times\Sigma\toQ\)为状态转......
  • 【笔记】C# CancellationToken
    .NET提供了一个类方便用来发出操作取消的信号,这个类就是CancellationToken,它的好处在于它可以在任意数量的线程之间、线程池任务之间、Task之间传递信号,并且所需的代码很简单。通常用于下载超时中断、用户取消任务等情况。CancellationToken通常搭配CancellationTokenSource......
  • Pick's Theorem 学习笔记
    Pick'sTheorem学习笔记UVA10088题目传送门题意:顺时针或逆时针地给出一个\(n\)个顶点(顶点都是整点)的简单多边形,求这个多边形内部的整点数量(位于多边形形上的整点不算)。Pick'sTheorem对于一个顶点都是整点的简单多边形:令\(I\)为多边形内部的整点数量,\(B\)为多边形形上......