总结SQL执行进展优化方法
作者:lijiao 发布时间:2024-01-13 22:38:44
在本文中,小编将与大家重点探讨SQL执行进展优化的方法。
聚集索引扫描
SELECT * FROM C_SY_Ownedstorm
聚集索引扫描比表扫描快
聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件等操作时,效率会较好。
表扫描
SELECT * FROM #temp
表扫描:发生于堆表,并且没有可用的索引时,会发生表扫描,表示整个表扫描一次。
测试SQL
CREATE TABLE t1(c1 INT, c2 VARCHAR (8000));
GO
DECLARE @a INT;
SELECT @a = 1;
WHILE (@a <= 5000)
BEGIN
INSERT INTO t1 VALUES (@a, replicate('a', 5000))
SELECT @a = @a + 1
END
GO
SELECT count(1) FROM t1
group by c1
哈希匹配:
哈希匹配的作用就是把它右侧的两个表中行数比较少的那个经过哈希算法形成一个哈希表,然后再有另一个数据行数比较大的表来之前形成的哈希表中匹配查找数据,大体上就是这个么流程。但是哈希匹配操作的出现一定要提高我们的警惕,当哈希匹配右侧的两个表中的数据有一个比另一个明显的少的时候,哈希匹配的效率会比较高,反之就会影响效率。出现哈希匹配大概有这么几个情况:
有缺失或者不正确的索引
缺少where字句
在where子句中有对列的类型转换或者数据操作,这样就不能使用索引了
虽说哈希匹配在某些情况下效率会比较高,但是这并不意味着没有更好的来提高这个查询的效率,比如添加适当的索引或者通过where语句来减少数据量等方法。换句话说,当出现哈希匹配这个操作的时候,我们要引起注意,看看是否还有别的方法来提高查询效率,如果没有的话,或许哈希匹配就是最好的选择了。
聚集索引查找:
CREATE UNIQUE CLUSTERED INDEX _Id
ON t1(c1)
select * from t1
where c1=3
排序:
排序是消耗性能的,sql server中排序是在数据找出来以后在进行排序的。
select * from t1
order by desc
循环嵌套
对于使用简单内连接的小数据量表,嵌套循环是最佳策略。最适合两个表的记录数差别非常大,并且在连接的列上都有索引的情况。嵌套循环连接所需的I/O和比较都是最少的。
嵌套循环在外表(往往是小数据量的表)中每次循环一个记录,然后在内表中查找所匹配的记录并输出。有很多关于嵌套循环策略的名字。例如,对整个表或索引进行查询,称为Naive(无知的)嵌套循环连接。使用正常索引或临时索引时,被称为索引嵌套循环连接或临时索引嵌套循环连接。
合并连接
合并连接也是在读的同时对两个存储输入的一行进行比较。在每个步骤中,比较每个输入的下一行。如果两行是相同,输出一个连接后的行并继续。如果行是不同的,舍弃两个输入行中较少的那个并继续。因为输入是存储,连接舍弃的任何行必须比两个输入中任何剩下的行要小,因此可以永不连接。合并连接不需要对两个输入中的每一行扫描。只要到了两个输入中的某一个的末尾,合并连接就会停止扫描。
嵌套循环连接总的消耗和在输入表中行的乘积成比例,不同于嵌套循环连接,合并连接的表最多读一次,总的消耗和输入行数的总数成正比例,因此何必连接对于大量的输入是较好的选择。
猜你喜欢
- 场景分析一般Linux系统默认自带两个版本的python,我按照的虚拟机系统自带的版本为python2.7和python3.2,但是由于个人
- 如下所示:import ioimport torchimport torch.onnxfrom models.C3AEModel impor
- 首先,下面贴上designer处理的界面文件(转换成py后的):# -*- coding: utf-8 -*-# Form implemen
- 一、TensorFlow介绍1、简介 TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,
- 前言:集合这种数据类型和我们数学中所学的集合很是相似,数学中堆积和的操作也有交集,并集和差集操作,python集合也是一样。一、交集操作1.
- 前言动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统
- 目录进程和线程Python的多进程进程池多进程间的数据通信与共享Python的多线程多线程间的数据共享使用queue队列通信-经典的生产者和
- 最近学习了一下前后端分离技术,前端用的是Vue,后段用的是Flask。vue官网:开源的 Javascript 框架,vue是一套构建用户界
- 在标准的dgango项目中,自动生成的目录结构会包括models.py和views.py两个文件,分别在里面写model的代码和contro
- 介绍一个利用Python监控当前联网状态情况的python代码,它可以清楚地知道,你的电脑网络是否是链接成功或失败,通俗的说,就是查看你的电
- Window.Open详解 一、window.open()支持环境:JavaScript1.0+/JScript1.0+/Nav2
- 今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错。检索一下还真的找到了。re模块re.search经常用match = re.s
- 这是一个很和谐很实用的网站管理程序,和我以前介绍的服务器管理程序不同的是,这个程序只有一个功能,就是实现远程Web方式删除文件(实际上是重命
- 我们有时候需要把一些 * 发给多个客户,为了避免客户泄露文件,会在 * 中添加水印。每个客户收到的文件内容相同,但是水印都不相同。这样一
- Saver的用法1. Saver的背景介绍我们经常在训练完一个模型之后希望保存训练的结果,这些结果指的是模型的参数,以便下次迭代的训练或者用
- 首先创建如下的数组和矩阵,其中a,b为数组,A,B为矩阵import numpy as npa = np.arange(1,5).resha
- 技术背景在一些对python开源库代码的安全扫描中,我们有可能需要分析库中所使用到的函数是否会对代码的执行环境造成一些非预期的影响。典型的例
- OpenCV介绍OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Ma
- 关于权限管理的思考最近用laravel设计后台,后台需要有个权限管理。权限管理实质上分为两个部分,首先是认证,然后是权限。认证部分非常好做,
- 一、内容简介使用while循环编写重复执行的语句使用哨兵值控制循环使用for循环实现计数器控制使用break、continue控制循环二、w