sql优化整理(二)
对于连接查询,EXPLAIN的extra字段出现using join buffer,表示使用了连接缓存,保证JOIN语句中被驱动表上JOIN条件字段已经添加索引;
LEFT JOIN 条件用于确定如何从右表搜索行,左边一定有,所以右边的关键是要建立索引;左连接索引加在右表;
RIGHT JOIN条件用于确定如何从左表搜索行,右边一定有,左边的关键是建立索引;左表建立索引;
关于慢查询分析的步骤
1.开启慢查询日志,设置阈值,比如超过5秒就是慢sql,并将它抓出来
2.explain+慢sql分析
3.show profile查询sql在mysql服务器里面的执行细节和生命周期等
4.sql数据库服务器的参数调优
小表驱动大表的解释,下面有两组循环;
第一组循环
for (int i = 5; ..) {
for(int j = 1000;...) {
}
}
第二组循环
for (int i = 1000;..) {
for (int j = 5; ...) {
}
}
上面两组循环,都是循环了5000次;对于数据库而言,第一组循环比较好,因为第一组循环总共就创建了5个连接,不用频繁的创建连接,释放连接;
小表驱动大表,意思是小的数据集驱动大的数据集;
EXISTS
select * from A where id in (select id from B)
-- 等价于:
-- for select id from B
-- for select * from A where A.id = B.id
当B的数据集必须小于A表的数据集时,用 in 优于 exists;
select * from A where exists (select 1 from B where B.id = A.id)
-- 等价于:
-- for select * from A
-- for select * from B where B.id = A.id
当A表的数据集小于B表的数据集时,用exists优于in;
注意: A表与B表的字段id应建立索引;
SELECT ... FROM table WHERE EXISTS(subquery)
将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或FALSE)来决定主查询的数据结果是否保留;
EXISTS(subquery) 只返回TRUE或FALSE,因此子查询中的SELECT * 也可以时select 1 或select 'x',官方说法是实际执行时会忽略SELECT清单,因此没有区别;
EXISTS子查询的实际执行过程可能经过了优化而不是我们理解的逐条对比,如果担忧效率问题,可进行实际校验以确定是否有效率问题;
EXISTS子查询往往也可以用条件表达式,其他子查询或JOIN来替代;
sql优化整理(二)的更多相关文章
- SQL语句整理(二) 数据定义语言DDL
前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...
- 关于sql优化整理一下
1.where 子句中可以对字段进行 null 值判断吗? 可以,比如 select id from t where num is null 这样的 sql 也是可以的.但是最好不要给数 ...
- sql优化整理(一)
sql的编写语法是这样的: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN < ...
- SQL知识整理二:锁、游标、索引
锁 锁的模式 锁模式 描述 共享(S) 用于不更改或不更新数据(只读操作),如SELECT语句 更新(U) 用于可更新的资源中.防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式的死锁 ...
- Sql优化(二) 快速计算Distinct Count
原创文章,始发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com 个人博客上本文链接http://www.jasongj.com/2015/03/15/count_di ...
- oracle存储过程及sql优化-(二)
接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解 PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR, P ...
- SQL优化汇总
今天面某家公司,然后问我SQL优化,感觉有点忘了,今天特此总结一下: 总结得是分两方面:索引优化和查询优化: 一. 索引优化: 1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化
本文提要 从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,对于慢sql,顾名思义就是花费较多执行时 ...
- sql优化点整理
此文是我最早开始sql优化至今整理的小知识点和经常遇到的问题,弄懂这些对优化大型的sql会有不少帮助 ---------------------------------使用了多余的外连接------- ...
随机推荐
- shell变量操作${}详细用法
${}基本功能 一般情况下$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围 [root@localhost ~]# A=Linux [root@localhost ~] ...
- docker部署Broketrmq集群
部署Broketrmq集群 通过docker-compose形式部署 首先创建 broker 配置文件,配置文件如下: brokerClusterName = DefaultCluster #集群名 ...
- redis连接池参数动态化
有的时候要从后端获取数据,真实的key可能在参数之上做一些修改,查了下set-misc模块,set_unescape_uri命令支持变量替换 location ~ /get_redis$ { ...
- Java线程阻塞方法sleep()和wait()精炼详解
版权声明:因为个人水平有限,文章中可能会出现错误,如果你觉得有描述不当.代码错误等内容或者有更好的实现方式,欢迎在评论区告诉我,即刻回复!最后,欢迎关注博主!谢谢 https://blog.csdn. ...
- Java并发包之ThreadPoolExecutor
概述 ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务. 构造参数 corePo ...
- 通过adrci ips打包incident给oracle
1.adrci查看incident 2.show home 3.set home adrci> set home diag/rdbms/mesdb/mesdb1 4.show incident ...
- .NET Core开源导入导出库 Magicodes.IE 2.3发布
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- 类加载器ClassLoader
上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...
- 几个超级好用但很少有人知道的 webstorm技巧
我总结一些我发现的比较实用的功能,内容来自日常工作中用到的功能.图片来自PPT,是在公司内部的分享. 你不知道的webstorm进阶使用技巧 1.双击shift 全局搜索,可以搜索代码.设置等. 如果 ...
- 进程管理、PS命令、nohup命令
1. Windows 下,扩展名为exe的文件,鼠标双击,运行,把这个程序正在运行的实例,称之为进程 Windows进程的信息可以通过 任务管理器看到 查看到:正在运行的计算器程序 Calculato ...