一、执行过程

二、优化

1.select查询优化

(1)保证不查询多余的列与行,应尽量避免全表扫描

尽量避免select * 的存在,使用具体的列代替*,避免多余的列。
使用where限定具体要查询的数据,避免多余的行
使用top,distinct关键字减少多余重复的行
给经常查询或需要排序的数据加上索引。

(2) 慎用distinct关键字

distinct在查询一个字段或者很少字段的情况下使用,会避免重复数据的出现,给查询带来优化效果。
但是查询字段很多的情况下使用,则会大大降低查询效率。
很明显带distinct的语句cpu时间和占用时间都高于不带distinct的语句。原因是当查询很多字段时,如果使用distinct,数据库引擎就会对数据进行比较,过滤掉重复数据,然而这个比较,过滤的过程则会毫不客气的占用系统资源,cpu时间。

(3)慎用union关键字

关键字主要功能是把各个查询语句的结果集合并到一个结果集中返回给你,满足union的语句必须满足:1.列数相同。
2.对应列数的数据类型要保持兼容。
执行过程:
依次执行select语句–>>合并结果集—>>对结果集进行排序,过滤重复记录。
这样效率就很低。

--exist代替in
select id from table where num exist(1,2,3,4,5,6)
--where字句使用or连接条件的替代方案
select id from table where num=10
union
select id from table where num=20;--连续的数值,能用between就不要用in
select id from table where num between 1 and 3;--使用参数的替代方案
--如果在where子句中使用参数(num = @num;),也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引的输入项。
select id from table where num=@num;
替代为:强制查询使用索引:
select id from table with(index(索引名)) where num=@num;--使用表达式的替代方案
select id from table where num/2=100;
替代为
select id from table where num=100*2;--使用函数操作的替代方案
select id from t where substring(name, 1, 3) = ’abc’–name; //以abc开头
替代为
select id from t where name like ‘abc%’;//单个百分号

(4)判断表中是否存在数据

select count(*) from product
select top(1) id from product

下面就很快

(5)连接查询的优化

先你要弄明白你想要的数据是什么样子的,然后再做出决定使用哪一种连接,这很重要。

各种连接的取值大小为:
内连接结果集大小取决于左右表满足条件的数量。
左连接取决与左表大小,右相反。
完全连接和交叉连接取决与左右两个表的数据总数量。

2.insert插入优化

insert into select批量插入,明显提升效率。所以尽量避免循环插入

3.优化修改删除语句

如果你同时修改或删除过多数据,会造成cpu利用率过高从而影响别人对数据库的访问。
如果你删除或修改过多数据,采用单一循环操作,那么会是效率很低,也就是操作时间过程会很漫长。
折中的办法就是,给个范围,分批操作数据。

delete product where id<1000
delete product where id>=1000 and id<2000
delete product where id>=2000 and id<3000

4.其他方面

索引的设计,详情可点击
尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
尽量避免大事务操作,提高系统并发能力。

sql语句的执行过程和优化相关推荐

  1. 执行计划 分析一条sql语句的效率 mysql_MySQL中一条SQL语句的执行过程

    MySQL中一条SQL语句的执行过程 发布时间:2018-11-24 18:35, 浏览次数:390 , 标签: MySQL SQL 查询语句的执行顺序: 1.客户端通过TCP连接发送连接请求到mys ...

  2. oracle+执行变量语句,ORACLE sql 语句的执行过程(SQL性能调整)

    第1章 SQL语句处理的过程 在调整之前我们需要了解一些背景知识,只有知道这些背景知识,我们才能更好的去调整sql语句. 本节介绍了SQL语句处理的基本过程,主要包括: · 查询语句处理 · DML语 ...

  3. MySQL总结(四)——MySQL中sql语句的执行过程

    MySQL 基本架构 连接器: 身份认证和权限相关(登录 MySQL 的时候). 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用). 分析器: 没有 ...

  4. mysql pdo 获取最后一条sql_一条sql语句的执行过程-mysql

    平时我们使用数据库,看到的通常都是一个整体.比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql> select * from T where ID=10: ...

  5. SQL语句的执行过程

    服务器接收到SQL语句之后,要经过如下步骤完成操作:Parse(解析)-> Bind(绑定)-> Execute(执行). 画个流程图比较明显的表示了这些过程: 下面说明执行的具体细节: ...

  6. oracle数据库sql的执行过程,Oracle体系结构之SQL语句的执行过程

    一般来说,数据库处理SQL都会经过三个过程:解析(parse).执行(exec).返回结果(fetch) 1.解析 当用户发起一个SQL语句时,Oracle通过Server Process 接收SQL ...

  7. mysql三高讲解(一):1.2 一个sql语句的执行过程

    查询缓存: 之前执行过的语句会以KV的形式缓存在内存中.查询先前查找过的内容会快速的返回结果. 不推荐使用缓存:因为数据表修改后,会删除所有相关缓存. 分析器: 优化器: 执行器: 存储引擎:Inno ...

  8. 逻辑io 物理io oracle,Oracle体系结构之SQL语句的执行过程

    命中率: 命中率在Oracle数据库的多个地方都会被提起 例如当一个进程需要访问数据时,首先确定数据是否存在Buffer Cache中,如果存在(称为高速缓存命中),则直接读取数据(逻辑IO/内存读) ...

  9. 一条SQL语句的执行过程

    一:思维导图

最新文章

  1. CUDA+OpenCV实现光线追踪(有无constant)
  2. 谈谈 Android MVP 架构 | 掘金技术征文
  3. laravel session redis 设置
  4. Dapr牵手.NET学习笔记:状态管理之docker-compose发布
  5. C++ 11 新特性(十一)final和override
  6. 压缩命令_Linux gzip命令:压缩文件或目录
  7. 爱计算机辅助筛查肺结节,计算机辅助检测系统提高CT肺结节检出方式的研究
  8. 国家图书馆关于php的书,国家图书馆啊,能借的书太少
  9. 力扣1317.将整数转换为两个无零整数之和
  10. hbase 根据主键查询
  11. 从app加载页面说开去
  12. 为增强软件供应链安全,NIST 发布《开发者软件验证最低标准指南》
  13. android游戏分成,原神半年吸金10亿美元,为何国内Android商店还秉承着55分成?
  14. android ijk 播放器,ijkplayer 播放器:在Android端进行native调试
  15. 沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生...
  16. 查找附近的人-mongodb的实现
  17. vue 实现快捷键录入功能
  18. VC编译器与GCC编译器的区别
  19. 小城里的“明星”产业,有微信云托管保驾护航
  20. 为什么跨平台扫盲很重要

热门文章

  1. pytorch将Tensor转为list
  2. python list转dict
  3. pytorch实现基本AutoEncoder与案例
  4. sklearn分类任务代码整理
  5. linux如何查看nohup日志大小,linux下nohup日志输出过大问题解决方案
  6. 250php货币,FreeHostia免费PHP空间中文面板250MB空间6GB流量
  7. ibatis 模糊查询 mysql_Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办
  8. python两个基本的库管理工具_Python多版本共存管理工具之pyenv
  9. linux监控指定用户操作,Linux 用户行为轨迹监控
  10. 网页内容切换效果实现的15个jQuery插件