今天早上考试,下午主要是老师引导我们学习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自行决定连表查询之驱动表
无索引:count(*) count(列)一样
有索引:列非空(count() count(列)一样) (列可空)count() count(列)不一样
但是count(*)与 count(列)不等价
count(*):会统计null列,count(列)不会计算Null列
count()速度最快,列的偏移量决定性能,列越靠后,访问开销越大,count()与列无关,所以count(*)速度最快,count(最后列)速度最慢
大表在前,小表在后是基于规则的时代(select /*+rule*/ count(*) from tab_big,tab.small),现在是基于代价的时代,两种写法一样的。
过滤条件越多,越放在后面-> 错
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表记录清空
oracle的 分表 详解 -----表分区
用表连接代替函数调用
用集合写法
分区慢:分区不加where会使性能变慢
位图索引:位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。
in性能好于>,<
需求是顶级优化
BIO,NIO,AIO的区别
转载于:https://www.cnblogs.com/sufferingStriver/p/9403472.html
相关资源:Postman-osx-7.30.1.zip