
SQL优化
文章平均质量分 66
SQL优化
※宋健※
这个作者很懒,什么都没留下…
展开
-
用分析函数代替Having
在支持分析函数的数据中,建议用分析函数代替Having查询1.数据准备:create table student(name char(50),subject char(50),score int,classid int);insert into student values('张三','语文',79,1);insert into student values('张三','数学',7...原创 2020-04-27 10:06:44 · 298 阅读 · 0 评论 -
关联更新建议用merge
本章节执行计划请自行采集。1.数据准备drop table test1;drop table test2;create table test1 as select * from dba_objects;create table test2 as select * from dba_objects;2.问题SQLupdate test1 t1set t1.object...原创 2020-02-18 17:00:32 · 1277 阅读 · 0 评论 -
一张图解释哈希连接
原创 2020-02-18 11:27:44 · 461 阅读 · 0 评论 -
还算深度解析Filter
1.引出问题我把Filter下面有两个结果集的查询成为Filter连接,虽然不严谨,但是为了好说明,在本博客后面,我们都叫做Filter连接。其实这个Filter连接和单表那种Filter一样,只不过是用驱动表的记录去筛选被驱动表的记录。关于这种Filter,网上说算法类似嵌套循环,但是Filter会维护一个内存表,当驱动表扫描数据时,先在内存表里检索是否有相同的记录,如果有,直接在内存表...原创 2019-12-15 14:30:00 · 343 阅读 · 0 评论 -
分析函数改善自连接
下面我们看一下各种求中间值的写法及性能比较。1.数据准备DROP table Student;CREATE TABLE Student(StuName VARCHAR2(10) NOT NULL,Subject VARCHAR2(10),Score INTEGER);insert into Student values('A1','数学',60);inse...原创 2019-11-17 15:16:01 · 163 阅读 · 0 评论 -
Having转Not Exists优化
Having如果相关查询,有时候会产生Filter,下面我们看看转换方法。1.数据准备DROP table Student;CREATE TABLE Student(StuName VARCHAR2(10) NOT NULL,SClass VARCHAR2(10) ,Subject VARCHAR2(10),Team VARCHAR2(10),Score I...原创 2019-11-17 00:31:19 · 493 阅读 · 0 评论 -
SQL优化-关联子查询改表连接
1.数据脚本drop table test1 ;create table test1 as select * from (select d.*,rownum as rn from dba_objects d where d.owner not in ('SYS','SYSTEM','PUB...原创 2019-11-04 15:55:22 · 1018 阅读 · 0 评论 -
SQL优化-分析函数优化(不等连接+聚合)
1.数据脚本drop table test1 ;drop table test2 ;drop table test3 ;create table test1 as select * from (select d.*,rownum as rn from dba_objects d w...原创 2019-11-04 15:13:56 · 999 阅读 · 0 评论 -
SQL优化-关联查询不要用not in
首先,我们看not in写法及执行计划SELECT count(*) FROM test t1WHERE 1234 NOT IN (SELECT t2.object_id FROM test t2 WHERE t1.owner = t2.owner...原创 2019-11-02 14:27:31 · 411 阅读 · 0 评论 -
SQL优化-Filter正名
之前我写过一篇博客分析Filter也有性能好的一面,最近看了一下,感觉说的不够浅显易懂,这里再写一篇。之前博客链接:https://blog.youkuaiyun.com/songjian1104/article/details/983256581 数据准备drop table emp1;drop table dept1;create table emp1 as select * fr...原创 2019-10-20 13:47:54 · 543 阅读 · 0 评论 -
关联表更新Merge优化
昨天,有一位美女提出了如下需求,周末没事,在家里好好查了一下。1 需求分析有三张表,商品表(TBLITEM),库存表(TBLSTORAGE),库存管理表(TBLMANAGEMENT);每一种商品对应的处理区分是0,并且库存总量大于1000,就把库存管理表的库存区分更新为1,小于1000,更新为0。2 数据准备DROP TABLE TBLITEM;DROP TABLE TBL...原创 2019-10-12 19:37:17 · 361 阅读 · 0 评论 -
SQL优化 第十二章 子查询提升
※本章节概念解释引用参考《数据库系统实现 第2版》12.1 子查询提升概念解释首先,我们得解释什么是子查询提升优化器会我们写的SQL会构建一个查询树,如下:select movieTitlefrom StarsInwhere starName in (select name from MovieStar...原创 2019-08-03 13:53:12 · 494 阅读 · 0 评论 -
SQL优化 第十一章 谓词下推与外连接消除
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。本章节参考《PostgreSQL技术内幕:查询优化深度探索》(张树杰著)(文章中※1、※2、※3、※4引用此书中原描述)。11.1 连接条件下推:※1如果连接条件引用了Nonull...原创 2019-08-03 13:01:34 · 1916 阅读 · 0 评论 -
SQL优化 第十章 Filter连接那点事
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。虽然Filter连接大部分时间不太讨喜,但是,鉴于存在即是合理的这种高大上的哲学思想,我们首先给Filter在局部范围平个反。10.1 数据脚本drop table test1;drop ...原创 2019-08-03 12:57:04 · 1694 阅读 · 0 评论 -
SQL优化 第九章 With改写优化SQL
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。9.1 提取公共项9.1.1. 数据脚本drop table test1;drop table test2;create table test1 as select * from...原创 2019-08-03 12:50:02 · 527 阅读 · 0 评论 -
SQL优化 第八章 案例模拟 8.4 Merge Join验证
8.4.1 构造数据环境create sequence SEQ_TESTminvalue 1maxvalue 999999999999999999999999999start with 1increment by 1cache 50;drop table test1;drop table test2;create table test1 as select SE...原创 2019-06-14 12:24:55 · 150 阅读 · 0 评论 -
SQL优化 第八章 案例模拟 8.3 FILTER优化1
8.3.1 数据环境准备drop table test1;drop table test2;drop table test3;create table test1 as select * from dba_objects;create table test2 as select * from test1;create table test3 as select * from...原创 2019-06-14 11:17:47 · 268 阅读 · 0 评论 -
SQL优化 第八章 案例模拟 8.2 max min同时读取优化
本案例参考《SQL优化核心思想》(罗炳森,黄超,钟侥著)。有听说这是某大公司的面试题,大家有什么更好的建议,欢迎留言评论。谢谢。8.2.1 构造数据环境drop table test1;create table test1 as select * from dba_objects;create index ix_test1_01 on test1(object_id);8....原创 2019-06-14 11:15:23 · 342 阅读 · 0 评论 -
SQL优化 第八章 案例模拟 8.1 union all优化
8.1.1 构造数据环境drop table test1;drop table test2;drop table test3;create table test1 as select * from dba_objects;create table test2 as select * from test1;create table test3 as select * from...原创 2019-06-14 11:12:11 · 408 阅读 · 0 评论 -
SQL优化 第七章 查询转换 4 Filter转换
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。4 Filter转换4.1 环境准备create table tests1 as select * from dba_objects;create table tests2 as s...原创 2019-06-09 06:23:30 · 529 阅读 · 0 评论 -
SQL优化 第七章 查询转换 3连接顺序专题
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。3 连接顺序专题3.1 外连接嵌套循环驱动表问题网络上经常说外连接走嵌套循环,驱动表顺序不能变,那走HASH驱动表为什么可以换?首先,说明外连接走嵌套循环为什么驱动表不能换,外连接嵌...原创 2019-06-09 06:19:41 · 594 阅读 · 0 评论 -
SQL 优化 第七章 查询转换 2视图合并和谓词推入
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。2视图合并和谓词推入2.1视图合并2.1.1 视图合并环境准备create table tests1 as select * from dba_objects;create ta...原创 2019-06-09 06:17:19 · 514 阅读 · 0 评论 -
SQL优化 第七章 查询转换 1半连接和内连接转换
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。1 半连接和内连接转换1.1 环境准备create table tests1 as select * from dba_objects;create table tests2 ...原创 2019-06-09 06:14:47 · 1290 阅读 · 0 评论 -
SQL优化 第六章 动态性能视图
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。Oracle维护了很多动态性能视图,我们可以根据这些视图找出一些性能问题,比如V$SQL, V$SQLAREA等,我们可以查出执行过的SQL的执行计划,也可以做一些SQL脚本来查找数据SQL性能...原创 2019-06-09 06:04:48 · 311 阅读 · 0 评论 -
SQL优化 第五章 表连接方法
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。个人认为SQL优化有两大招,第一招,正确使用索引,这种方法简单快捷;第二招,就是更改表连接方法,这个有时候会比较复杂,很多时候,我们在和外连接,半连接,反连接,标量子查询做斗争。下面是本章节...原创 2019-06-09 06:09:27 · 627 阅读 · 0 评论 -
SQL优化 第四章 统计信息
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。1 统计信息说明数据库的数据是一直变化的,那么执行计划有时候也是要动态变化的,举个简单的例子,今天某张表的商品ID是分布均匀的,那么某个促销活动,可能会让这个商品ID对应的数据暴增,原来走索...原创 2019-06-09 06:03:15 · 186 阅读 · 0 评论 -
SQL优化 第三章 表访问方式
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。通过第一章和第二章讲解的基础,我们开始学习怎么从表中获取数据更为高效,也就是走索引还是走全表,因为索引好,也不是万能的,全表扫,有时候性能还要高过索引,所谓,存在即使合理的。同时,我们会从基本理...原创 2019-06-09 06:01:23 · 420 阅读 · 0 评论 -
SQL优化 第二章 获取执行计划
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。执行计划就是SQL执行的步骤,因为我们写的SQL不一定就是按照我们写的执行,数据库优化器会根据统计信息(统计信息后面讲解)进行SQL改写(SQL改写后面讲解),生成执行计划,但是下面三种执行计划...原创 2019-06-09 05:58:52 · 587 阅读 · 2 评论 -
SQL优化 第一章 数据存储及索引
参考资料:本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。1 事先说明我们做SQL优化,其中最直截了当的利器便是索引,当然,也是一把双刃剑,既然讲到索引,我们就要讲表里的数据怎么存储的,只有这样,我们才会把索引的基本原理,为什么要建索引,怎么用索引...原创 2019-06-09 05:52:25 · 420 阅读 · 1 评论 -
分析函数改善自连接-20191006-01
1 数据准备drop table test1;create table test1 as select * from dba_objects where rownum<10000;alter table test1 add constraint pk_test1 primary key (object_id);commit;2 需求分析以owner分组,求每组内小于最...原创 2019-10-06 10:48:29 · 158 阅读 · 0 评论 -
SQL高效分页
本章节我们讨论SQL高效分页问题。1.1 数据准备DROP TABLE TEST9;CREATE TABLE TEST9 AS SELECT * FROM DBA_OBJECTS;COMMIT;alter table TEST9 add constraint PK_TEST9 primary key (OBJECT_ID);1.2 低效分页SELECT * FRO...原创 2019-09-15 12:36:22 · 254 阅读 · 0 评论 -
SQL优化-分析函数减少大表扫描次数
我们看一下分析函数减少大表的扫描次数。下面案例使用Oracle自带示例数据,Schema为sh。首先,需求如下,我们要求产品id,时间id,产品销售数量,以及到目前时间的累积销售数量。先来一个性能较好的分析函数版本。WITH TMP AS(SELECT S.PROD_ID, S.TIME_ID, S.QUANTITY_SOLD,...原创 2019-09-15 13:21:12 · 667 阅读 · 0 评论 -
Filter消除-20190929-01
1 数据准备DROP TABLE TEST1;DROP TABLE TEST2;CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;CREATE TABLE TEST2 AS SELECT D.* ,trunc(dbms_random.v...原创 2019-09-29 14:26:51 · 152 阅读 · 0 评论 -
Filter消除-20190929-02
1 数据准备DROP TABLE TEST1;DROP TABLE TEST2;DROP TABLE TEST3;CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;CREATE TABLE TEST2 AS SELECT D.* ,tru...原创 2019-09-29 14:36:27 · 177 阅读 · 0 评论 -
Filter消除-20190929-03
1 数据准备CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;2 性能改善2.1 写法一SELECT OWNER, COUNT(*) FROM TEST1GROUP BY OWNERHAVING COUNT(*) + 1...原创 2019-09-29 15:54:47 · 262 阅读 · 0 评论 -
优化器执行计划选择
1 数据准备CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;2 性能改善2.1 写法一SELECT DISTINCT T1.OWNER FROM TEST1 T1WHERE RAN_VAL < (SEL...原创 2019-09-29 17:06:58 · 229 阅读 · 0 评论 -
SQL优化-避免多余Group By
1 数据准备drop table test1;drop table test2;create table test1 as select * from dba_objects;alter table test1 add constraint pk_test1 primary key (object_id);create table test2 as select * fr...原创 2019-10-05 14:42:01 · 1108 阅读 · 0 评论 -
Filter消除-20190928-01
1 数据准备drop table test1;drop table test2;create table test1 as select * from dba_objects;create table test2 as select * from dba_objects;insert into test2 select * from test2 where rownum<...原创 2019-09-28 16:14:30 · 401 阅读 · 0 评论