7.30实习培训日志-SQL优化
总结
今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO),netty,对于NIO的进一步封装,主要因为NIO用起来很麻烦。邵闫利主要给我们讲解了java基础,特别强调设计模式的应用,工厂模式,观察者模式,装饰器模式三者,给我们通俗易懂的讲解虽然我还是不太懂,下来自己去看一下设计模式,后面的同学都给我们讲解了一些新的知识,git rebase,k8s子类的东西,收获良多。
杂项
用in和exists替换distinct
能用union不要用union all
驱动表
wwh999 在 2006年总结说,当进行多表连接查询时, [驱动表] 的定义为:
- 指定了联接条件时,满足查询条件的记录行数少的表为[驱动表];
- 未指定联接条件时,行数少的表为[驱动表](Important!)。
优化
- LEFT JOIN改为JOIN
- 除所有JOIN,让MySQL自行决定
基于案例学习的sql优化
从案例中推导SQL优化的总体思路与误区
count(*) count(列)
无索引:count(*) count(列)一样
有索引:列非空(count() count(列)一样) (列可空)count() count(列)不一样
但是count(*)与 count(列)不等价
count(*):会统计null列,count(列)不会计算Null列
count()速度最快,列的偏移量决定性能,列越靠后,访问开销越大,count()与列无关,所以count(*)速度最快,count(最后列)速度最慢
sql书写顺序
表的连接顺序
大表在前,小表在后是基于规则的时代(select /*+rule*/ count(*) from tab_big,tab.small),现在是基于代价的时代,两种写法一样的。
表的条件顺序
过滤条件越多,越放在后面-> 错
not in,not exists
anti反连接算法比filter高效,10g中,oracle指定非空,not in才用anti算法.11g中not in 和not exists一样,无论是否非空,都走anti算法。
设计
全局临时表
delete删除开销大,占用大量回滚段和产生大量日志。
CREATE GLOBAL TEMPORARY TABLE temp_table_session (...) ON COMMIT (PRESERVE|DELETE) ROWS
session全局临时表:退出session记录清空
基于事务全局临时表:commit表记录清空
分区表
create table range_part_tab (id number,deal_date date,area_code number,contents varchar2(4000))
partition by range (deal_date)
(
partition p1 values less than (TO_DATE('2012-02-01', 'YYYY-MM-DD')),
...
partition p_max values less than (maxvalue)
)
;
历史数据管理
开发
避免SQL中函数调用
用表连接代替函数调用
用集合写法
只取所需列
- 访问视图变快,可以避免访问更多表
- 可以通过索引得到列,无需回表
- 表连接变快,避免连接更多的表
超长SQL优化
- case when相同代码封装
- group by简化case when(部分适用)
根据场景选择技术
索引坏处
- 先插入数据,再创建索引。
- 在有索引时插入数据很慢,需要保持数据有序
- 分成两个库(一个生产库,很少索引)(一个查询库,很多索引)
分区慢:分区不加where会使性能变慢
位图索引:位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。
等价改写
-- 不等价 一份复制,两份粘贴
insert all into ljb_tmp_transaction into ljb_tmp_session select * from dba_objects
-- 不等价,同一时刻记录不一样
insert into ljb_tmp_transaction as select * from dba_objects;
insert into jb_tmp_session as select * from dba_objects;
-- 没有办法同时扫描叶子,性能比第二条差,但是不等价
select min(object_id),max(object_id) from t;
-- 不是同一时刻
select max(object_id) from t;
select min(object_id) from t;
-- a,b同时一条,索引不会有笛卡尔积 和第一条等价,性能好
select max, min
from (select max(object_id) max from t ) a,
(select min(object_id) min from t ) b;
in性能好于>,<
需求是顶级优化
7.30实习培训日志-SQL优化的更多相关文章
- 7.31实习培训日志-docker sql
docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...
- 7.27实习培训日志-Oracle SQL(三)
Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...
- 7.25实习培训日志-Oracle SQL(一)
Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...
- 7.26实习培训日志-Oracle SQL(二)
Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...
- 7.24实习培训日志-Docker-Compose
Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...
- 7.23实习培训日志-JDBC
总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...
- 7.29实习培训日志-Oracle题目
总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...
- 7.21实习培训日志-JDBC JSP Servlet
JDBC JSP Servlet 总结 今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简 ...
- 7.19实习培训日志- java进阶
java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...
随机推荐
- castle windsor学习-----Fluent Registration API 注册
使用xml配置和fluent注册两种搭配使用需要注意的是: 如果先在WindsorContainer构造函数指明用xml配置进行注册,如下设置 IWindsorContainer container ...
- Java -- eclipse常用快捷键
- Oracle的控制文件和日志文件
--什么是控制文件 控制文件是数据库的一个二进制文件,它主要记录数据库的名称. 数据库的数据文件存放位置等信息. 一个控制文件只能属于一个数据库.如果控制文件丢失,这数据库就无法操作. --下面查询语 ...
- Codeforces 245H Queries for Number of Palindromes:区间dp
题目链接:http://codeforces.com/problemset/problem/245/H 题意: 给你一个字符串s. 然后有t个询问,每个询问给出x,y,问你区间[x,y]中的回文子串的 ...
- hdu 2955 Robberies(01背包)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Bootstrap-菜单,导航,按钮
1.下拉菜单(基本用法) 在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件: ☑ LESS版本:对应的源码文件为 dropdowns.less ☑ Sass版 ...
- BEC listen and translation exercise 48
It's not publicly known who the kidnappers were. Because they are not eating such lovely food since ...
- python 标准库 —— http(http.cookiejar)
1. cookie 信息的读取 from urllib import request import http from http import cookiejar cookie = cookiejar ...
- HDU3579Hello Kiki(中国剩余定理)(不互质的情况)
One day I was shopping in the supermarket. There was a cashier counting coins seriously when a littl ...
- NOIP 2011 DAY 2
第一题:计算系数 题目 给定一个多项式 (ax+by)k,请求出多项式展开后xnym 项的系数. 输入 共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开 ...