资源描述:
《《sql优化经典讲解》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、SQL优化基础索引索引的类型B*树索引反向码索引降序索引位图索引基于函数的索引B*树索引基于二叉树的,由分支块和叶子块组成.包括每个被索引列的值和行所对应的ROWIDCreateindexindexnameontabename(columnname)反向索引B*索引的一个分支反转索引码中每列的字节便于并发Createindexindexnameontablename(column)reverseORACLE的内部表示SQL>selectdump(1,16)fromdual2unionallselectdump(2,16)fromdual3unionallselectdu
2、mp(3,16)fromdual4/DUMP(1,16)-----------------Typ=2Len=2:c1,2Typ=2Len=2:c1,3Typ=2Len=2:c1,4已用时间:00:00:00.00反向的情况SQL>selectdump(reverse(1),16)fromdual2unionallselectdump(reverse(2),16)fromdual3unionallselectdump(reverse(3),16)fromdual;DUMP(REVERSE(1),1-----------------Typ=2Len=2:2,c1Typ=2L
3、en=2:3,c1Typ=2Len=2:4,c1已用时间:00:00:00.00SQL>降序索引索引中的储存方式由升序变成降序SQL>select*fromtesttwhereidbetween1and100orderbyiddesc,nameasc;已选择100行。已用时间:00:00:00.01ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE10SORT(ORDERBY)21TABLEACCESS(BYINDE
4、XROWID)OF'TEST'32INDEX(RANGESCAN)OF'PK_ID'(UNIQUE)SQL>createindexi_descontest(iddesc,nameasc);索引已创建。已用时间:00:00:00.01ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(BYINDEXROWID)OF'TEST'21INDEX(RANGESCAN)OF'PK_ID'(UNIQUE
5、)位图索引用于低cardinality列(即列的唯一值除以行数为一个很小的值,接近零)如”性别”不适用于并行只能在CBO下Createbitmapindexindexnameontablename(column)SQL>select*fromtestbitmapwheresex='男';已选择5000行。ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(FULL)OF'TESTBITMAP
6、'位图索引的特点比B*tree索引更节省空间建立速度快不能走RULE可存储NULL值SQL>createindexbit_inx_sexontestbitmap(sex);索引已创建。SQL>select*fromtestbitmapwheresex='男';已选择5000行。ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(BYINDEXROWID)OF'TESTBITMAP'21IND
7、EX(RANGESCAN)OF'BIT_INX_SEX'(NON-UNIQUE)函数索引必须拥有QUERY_REWRITE权限必须使用基于成本的优化器必须设置以下两个参数:query_rewrite_enabled=truequery_rewrite_integrity=trustedCreateindexindexnameontabename(fun(column))SQL>createindexl_funontest(upper(name));分析表略去……SQL>select*fromtestwhereupper(name)='1T