
SQL Tuning
郭一军_guoyJoe
云贝教育创始人,腾讯云TVP,腾讯云TDSQL首席讲师,MySQL官方授权讲师,阿里云官方授权讲师,中国PostgreSQL分会官方授权讲师。历任过腾讯云TDSQL专家级工程师、唯品会高级数据库专家、连连支付首席DBA、吉利汽车研究院云计算平台技术负责人。从业IT 20余年,拥有10几年数据库的开发与运维管理经验。言传身教,亲授云计算、大数据、数据库等方面的几十门课程。为中国IT业特别是数据库行业输送了大量人才,引领无数弟子进入业界,广受尊重。
展开
-
优化器CBO知识点
ORACLE 提供了基于成本(CostBased)和基于规则(RuleBased)两种优化器,简称为CBO和RBO,用于确定查询操作的执行计划。一、如何使用CostBased优化器优化查询操作?如何使用CBO,那么首先要理解这些概念 1、CBO的成本计算的依据 (1)统计信息:与SQL语句所引用的对象相关以及主机的CPU和IO (2)SQL语句本身原创 2013-02-06 22:46:55 · 1418 阅读 · 0 评论 -
通过一个案例彻底读懂10046 trace--字节级深入破解
大家是否面对生产上很慢的SQL束手无策,经常碰到类似下面的一些问题,这里我只是举例。。。1. merge join cartestian引发的严重性能问题.2. 为什么这条SQL一定要走index skip scan? --在patition表上rebuild index引起的问题.3. 为什么这条SQL总是走full table scan?4. 什么引发了wrong results?原创 2014-07-16 00:01:56 · 3009 阅读 · 0 评论 -
统计信息
一、系统统计信息:select pname, pval1 from sys.aux_stats$ where sname='SYSSTATS_MAIN';PNAME PVAL1------------------------------ ----------CPUSPEEDCPUSPEEDNW原创 2013-02-06 22:21:33 · 1496 阅读 · 0 评论 -
获取执行计划的几种方法
1、执行SQL语句EXPLAIN PLAN,然后查询结果输出表 utlxplan.sql plan_table(全局临时表,它会存储数据直到会话结束,多个并发用户可以互不影响彼此的工作) explain plan for select count(*) from t10;col Id for 99col Operation for a30;col Name for a原创 2013-02-05 00:48:49 · 2144 阅读 · 0 评论 -
稳固执行计划
1.创建大纲 create or replace outline outln_t1 for category category_t1 on select * from t1 where id=1; alter system set use_stored_outlines=category_t1; --激活一个类目的存储大纲 --select sql_id,hash_va原创 2013-02-05 00:55:36 · 1517 阅读 · 0 评论 -
聚簇因子
1、聚簇因子(clustering_factor):是使用B树索引进行区间扫描的成本很重要因素,反映数据在表中分布的随机程度2、聚簇因子的计算方法: ①扫描索引 ②比较某行的ROWID和前一行的ROWID,如果这两个ROWID不属于同一个数据块,那么聚簇因子增加1 ③整个索引扫描完毕后,就得到了该索引的集群因子 --对选择最优查询路径影响最大的只有列的选择率和聚原创 2013-02-05 12:24:09 · 1374 阅读 · 0 评论 -
查询转换
1、视图合并(view merge) SELECT to_char(wmsys.wm_concat(a.TABLE_NAME)) FROM user_tables a, dba_objects b WHERE a.TABLE_NAME = b.OBJECT_NAME AND b.OWNER = 'GYJ' AND B.OBJECT_TYPE = 'TABLE原创 2013-02-05 12:27:07 · 1380 阅读 · 0 评论 -
绑定变量与直方图
一、绑定变量的窥探(peek) 1、Oracle在处理带有绑定变量的SQL时候,只会在硬解析的时候才会“窥探”一下SQL中绑定变量的值,然后会根据窥探到的值来决定整个SQL的执行计划。参数:_optim_peek_user_binds 2、绑定变量窥探的案例 create table t8(id int ,name varchar2(100)); begin for原创 2013-02-05 12:38:19 · 2301 阅读 · 0 评论 -
求t表中x的第2大的值,有多少种方法?
create table t(x int);insert into t values(1);insert into t values(3);insert into t values(5);insert into t values(7);insert into t values(9);commit;SQL> select * from t; X--原创 2013-02-06 23:32:32 · 2487 阅读 · 1 评论 -
SQL优化方法
一、 什么情况下需要优化SQL? 1、单个查询执行时间非常长 2、许多查询执行时间过长,但是有一个代表性的可以调整(使用绑定变量)二、什么情况下会触发SQL慢? 1、数据库版本的升级改变了行为或有bug 2、统计信息不正确 3、数据变化 4、应用变化三、什么地方会出错呢? 1、索引:没被创建、建了但无效、建了但没走索引 2、原创 2013-02-04 16:43:08 · 1483 阅读 · 0 评论 -
SQL PROFILE的用法
一般只需要步骤三、四就可以完成执行计划的修改和固定,而outline和baseline则需要N多个步骤。SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名,SQL PROFILE还有其他一些牛逼的特性。我的示例里教了大家偷懒的做法,但是有时间我们还是最好认真把query block原创 2013-02-05 10:49:17 · 1480 阅读 · 0 评论 -
dbms_stats 使用方式
1.创建存放统计信息的表:exec DBMS_STATS.CREATE_STAT_TABLE (ownname=>'GYJ', stattab=>'STAT_TAB',tblspace=>'STAT_TP1'); 2.导出备份统计信息:exec dbms_stats.export_table_stats(ownname=>'GYJ',tabname=>'LOG_PREPAY_INF原创 2013-02-18 01:06:21 · 1649 阅读 · 0 评论 -
选择率和基数
一、选择率(Selectivity):选择率是指满足条件的行在查询的结果集中所占的比率1、假设教室中有120个人,如何才能确定其中有多少人的生日是在10月份? 一年中有12个月 --已知条件 出生日期可能散布在这12个月中 --假设 出生在任何一个月份中的人占整个教室总人数的1/12 --月的选择率原创 2013-02-05 12:17:16 · 1912 阅读 · 0 评论 -
nvl() 与decode()两个函数哪个性能更佳?
1.创建一个测试表test,并插入一条数据SQL> create table test(id int);Table created.SQL> insert into test values(1);1 row created.SQL> commit;Commit complete.2.创建一个函数,用来延时,调到到这个函数会在这里循环500原创 2013-02-06 23:21:30 · 4316 阅读 · 1 评论 -
Oracle OCP之硬解析在共享池中获取内存锁的过程
Oracle OCP之硬解析在共享池中获取内存锁的过程原创 2014-08-19 17:21:36 · 2595 阅读 · 0 评论