sql优化经典讲解.ppt
《sql优化经典讲解.ppt》由会员分享,可在线阅读,更多相关《sql优化经典讲解.ppt(82页珍藏版)》请在三一办公上搜索。
1、SQL优化基础,索引,索引的类型 B*树索引 反向码索引 降序索引 位图索引 基于函数的索引,B*树索引,基于二叉树的,由分支块和叶子块组成.包括每个被索引列的值和行所对应的ROWIDCreate index indexname on tabename(columnname),反向索引,B*索引的一个分支反转索引码中每列的字节便于并发Create index indexname on tablename(column)reverse,ORACLE的内部表示,SQL select dump(1,16)from dual 2 union all select dump(2,16)from dual
2、 3 union all select dump(3,16)from dual 4/DUMP(1,16)-Typ=2 Len=2:c1,2Typ=2 Len=2:c1,3Typ=2 Len=2:c1,4已用时间:00:00:00.00,反向的情况,SQL select dump(reverse(1),16)from dual 2 union all select dump(reverse(2),16)from dual 3 union all select dump(reverse(3),16)from dual;DUMP(REVERSE(1),1-Typ=2 Len=2:2,c1Typ=2
3、Len=2:3,c1Typ=2 Len=2:4,c1已用时间:00:00:00.00SQL,降序索引,索引中的储存方式由升序变成降序SQL select*from test t where id between 1 and 100 order by id desc,name asc;已选择100行。已用时间:00:00:00.01Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT(ORDER BY)2 1 TABLE ACCESS(BY INDEX ROWID)OF TEST 3 2 INDEX(RANGE SCAN)OF P
4、K_ID(UNIQUE),SQL create index i_desc on test(id desc,name asc);索引已创建。已用时间:00:00:00.01Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS(BY INDEX ROWID)OF TEST 2 1 INDEX(RANGE SCAN)OF PK_ID(UNIQUE),位图索引,用于低cardinality列(即列的唯一值除以行数为一个很小的值,接近零)如”性别”不适用于并行只能在CBO下Create bitmap index index
5、name on tablename(column),SQL select*from testbitmap where sex=男;已选择5000行。Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS(FULL)OF TESTBITMAP,位图索引的特点,比B*tree索引更节省空间建立速度快不能走RULE可存储NULL值,SQL create index bit_inx_sex on testbitmap(sex);索引已创建。SQL select*from testbitmap where sex=男;已选择
6、5000行。Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS(BY INDEX ROWID)OF TESTBITMAP 2 1 INDEX(RANGE SCAN)OF BIT_INX_SEX(NON-UNIQUE),函数索引,必须拥有QUERY_REWRITE权限必须使用基于成本的优化器必须设置以下两个参数:query_rewrite_enabled=true query_rewrite_integrity=trustedCreate index indexname on tabename(fun(colum
7、n),SQL create index l_fun on test(upper(name);分析表略去SQL select*from test where upper(name)=1TEST;ID NAME-1 1test已用时间:00:00:00.04Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE(Cost=2 Card=1 Bytes=11)1 0 TABLE ACCESS(BY INDEX ROWID)OF TEST(Cost=2 Card=1 Bytes=11)2 1 INDEX(RANGE SCAN)OF L_FUN(NON-UN
8、IQUE)(Cost=1 Card=1),各种索引使用场合,B*tree 多用于oltp系统.cardinlity高的情况下反向索引 OPS环境下降序索引 带排序操作,位图索引 适用于低cardinality列.适合集中读取,不适合插入和修改,原因在于任何需要更新同一个位图索引条目的修改都将锁定整个位图,严重抑制了并发性,未用到索引的原因,类型不匹配对列使用了函数,而索引只是基于列的。使用索引实际会降低速度。很长时间没有分析表了,表的增长较快,这样CBO会作出错误的判断。结果集返回的比例过大Query_rewrite_enabled未设为true而导致函数索引不可用,索引的管理,DROP过多的
9、索引监控索引 alter index monitoring usage;注:9205以下有BUG.重建索引 alter index IDX rebuild online迁移索引 alter index rebuild tablespace,常见的一些问题,使用NULL条件查询 方法UPDATE为N/A,然后查:如 id=N/ALike%a%:使用firstrows提示,Like%DURE如:where object_type like%DURE create index inxreserve on user_test(reverse(object_type)反向索引创建后改写为:where r
10、everse(object_type)like ERUD%,理解SQL工具,执行计划,ORACLE_HOME/rdbms/admin/utlxplan.sqlCreate public synonym plan_table for sys.plan_table;,查看执行计划的几种方式,1.explain plan forselect*.select*from table(dbms_xplan.display);2.Explain plan set statement_id=id into plan_table for sql statement3.sqlplus:set autotrace
11、on;4.sql_trace and tkprof,Trace文件解释,Count CpuElapsedDiskQueryCurrentRows,阅读执行计划,首先读取缩进最深的语句如果两上语句的缩进程度相同,则上面的先,Oracle优化器,Oracle优化器的类型,Cost Based Optimizer(简称CBO)基于统计信息的优化Rule Based Optimizer(简称RBO)基于数据字典的优化,在以后的版本中将不支持,RBO,根据数据字典查询有无可用的索引,如果有则使用,否则不使用不同的访问方法有预定好的优先级,选择优先级高的执行方法,RBO中访问数据,Rowid-Cluste
12、r Join(SR)-Hash Cluster Key(SR)-UK或PK(SR)-Cluster Join-Hash Cluster Key-Index Cluster Key-Composite Index-Single Column Index-Bound Range Index Scan-Unbound Range Index Scan-Sort Merge Join-Max or Min on Indexed Column-Order on Indexed Column-Full Table Scan,RBO的特点,总是使用索引总是使用驱动表只有在不可避免的避免的情况才使用全表扫描任
13、何索引都可以(但并非很好),例子,SQL select count(*)from user_test;COUNT(*)-30904已用时间:00:00:00.01SQL create index id_owner on user_test(owner);索引已创建。已用时间:00:00:00.09,SQL select*from user_test where owner=SYS;已选择13931行。已用时间:00:00:00.07Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS(BY INDEX ROWID
14、)OF USER_TEST 2 1 INDEX(RANGE SCAN)OF ID_OWNER(NON-UNIQUE)Statistics-0 recursive calls 0 db block gets 2060 consistent gets 29 physical reads 0 redo size 995554 bytes sent via SQL*Net to client 10711 bytes received via SQL*Net from client 930 SQL*Net roundtrips to/from client 0 sorts(memory)0 sorts(
15、disk),SQL drop index id_owner;索引已丢弃。已用时间:00:00:00.00SQL select*from user_test where owner=SYS 2/已选择13931行。已用时间:00:00:00.07Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS(FULL)OF USER_TEST,CBO,需要收集统计信息表有多少行,占用多少数据块列有多少个Null值、不同值列的最大值和最小值,及值的分布情况索引的层次、结点数、叶结点数,及行的分布状况(Cluster)根据一定算
16、法算出一个成本值,选择成本值最低的执行方法,不一定使用索引。,CBO的新功能,Partition Table 和 Partition IndexIndex Organized TableReserve Key IndexFunction IndexBitmap Index 和 Bitmap Join IndexIndex Skip ScanParallel Query 和 Parallel DMLHash Join基于实体化视图的Query Rewrite,使用CBO,新的应用应当基于CBO开发用Analyze dbms_stats收集信息在语句中用hint指定rule choose firs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql 优化 经典 讲解

链接地址:https://www.31ppt.com/p-6524300.html