您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > BitmapIndexInternals
1juliandyke.comBitmapIndexInternalsJulianDykeIndependentConsultantWebVersion©2005JulianDyke©2005JulianDykejuliandyke.com2AgendaIntroductionBitmapRowSourcesInternalStructuresBitmapIndexDMLConclusion©2005JulianDykejuliandyke.com3Introduction©2005JulianDykejuliandyke.com4BitmapIndexesIntroducedinOracle7.3OriginallyintendedforcolumnswithLowcardinality(fewdistinctvalues)LittleornoDMLactivityOftenusedinDSSenvironmentsUsefulforad-hocquerieswherepredicatesarenotknowninadvance©2005JulianDykejuliandyke.com5BitmapIndexPropertiesBitmapindexesMustbenon-uniqueIncludeNULLvalues(B*Treeindexesdonot)Maximum30columns(B*Treeindexesmax32columns)Canbelocallypartitioned(8.1.5andabove)CannotbegloballypartitionedCanbefunction-basedindexes(built-inoruser-defined)CanbeIOTsecondaryindexes(9.2andabove)CanbecreatedonglobaltemporarytablesCannotbecompressedCannotbereversed©2005JulianDykejuliandyke.com6BitmapIndexesCREATETABLEproperty(property_codeNUMBER,bedroomsNUMBER,receptionsNUMBER,garagesNUMBER);CREATEBITMAPINDEXindex1ONproperty(bedrooms);CREATEBITMAPINDEXindex2ONproperty(receptions);CREATEBITMAPINDEXindex3ONproperty(garages);SELECTproperty_codeFROMpropertyWHEREbedrooms=4ANDreceptions=3ANDgarages=2Forexample©2005JulianDykejuliandyke.com7LogicalOperationsBitmapscanbecombinedusingthelogicaloperationsAND,OR,NOT.ABAANDBAORBNOTA00001010111001011110OraclealsoimplementsaMINUSoperationinternallyAMINUSBisequivalenttoAANDNOTB©2005JulianDykejuliandyke.com8MulticolumnBitmapIndexesBitmapindexescanbedefinedformorethanonecolumnCREATEBITMAPINDEXi1ONt1(c1,c2);CanbeusedforqueriessuchasSELECT*FROMt1WHEREc1=0;SELECT*FROMt1WHEREc1=0ANDc2=0;HoweverforqueriessuchasSELECT*FROMt1WHEREc2=0;thereisapparentlynoequivalenttoINDEX(SKIPSCAN)ConsidercreatingtwoindexesandallowingOracletoperformjoindynamicallyCREATEBITMAPINDEXi1ONt1(c1);CREATEBITMAPINDEXi2ONt1(c2);©2005JulianDykejuliandyke.com9BitmapRowSources©2005JulianDykejuliandyke.com10BitmapRowSourcesOperationVersionBITMAPINDEX(SINGLEVALUE)7.3.2BITMAPINDEX(RANGESCAN)7.3.2BITMAPINDEX(FULLSCAN)7.3.2BITMAPINDEX(FASTFULLSCAN)9.0.1BITMAPAND7.3.2BITMAPOR7.3.2BITMAPMINUS7.3.2BITMAPMERGE7.3.2BITMAPKEYITERATION7.3.2BITMAPCONVERSIONTOROWIDS7.3.2BITMAPCONVERSIONCOUNT7.3.2BITMAPCONVERSIONFROMROWIDS7.3.2BITMAPCONSTRUCTION7.3.2BITMAPCOMPACTION7.3.2©2005JulianDykejuliandyke.com11BitmapIndexOperationIntroducedin7.3OptionsareBITMAPINDEX(SINGLEVALUE)BuildsasinglebitmapforagivenvalueBITMAPINDEX(RANGESCAN)BuildsabitmapcontainingeachvalueintherangeBITMAPINDEX(FULLSCAN)BuildsabitmapcontainingeachvalueintheindexBITMAPINDEX(FASTFULLSCAN)Oracle9.0.1andaboveEquivalenttoINDEX(FASTFULLSCAN)©2005JulianDykejuliandyke.com12BitmapConversionOperationIntroducedinOracle7.3OptionsareBITMAPCONVERSION(TOROWIDS)ConvertsabitmapintoasetofROWIDsBITMAPCONVERSION(COUNT)ReturnsthenumberofsetbitsinabitmapUsedtoimplementCOUNT()aggregatesBITMAPCONVERSION(FROMROWIDS)ConvertsasetofROWIDsintoabitmap©2005JulianDykejuliandyke.com13BitmapAndOperationIntroducedinOracle7.3PerformslogicalANDoperationbetweentwobitmapsCREATETABLEt1(c1NUMBER,c2NUMBER);CREATEBITMAPINDEXi1ONt1(c1);CREATEBITMAPINDEXi2ONt1(c2);0SELECTSTATEMENTOptimizer=CHOOSE10BITMAPCONVERSION(TOROWIDS)21BITMAPAND32BITMAPINDEX(SINGLEVALUE)OF'I1‘42BITMAPINDEX(SINGLEVALUE)OF'I2‘SELECT/*+INDEX_COMBINE(t1i1i2)*/c1,c2FROMt1WHEREc1=0ANDc2=0;©2005JulianDykejuliandyke.com14BitmapOrOperationIntroducedinOracle7.3PerformslogicalORoperationbetweentwobitmapsCREATETABLEt1(c1NUMBER,c2NUMBER);CREATEBITMAPINDEXi1ONt1(c1);CREATEBITMAPINDEXi2ONt1(c2);0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(BYINDEXROWID)OF'T1‘21BITMAPCONVERSION(TOROWIDS)32BITMAPOR43BITMAPINDEX(SINGLEVALUE)OF'I1‘53BITMAPINDEX(SINGLEVALUE)OF'I2'SELECT/*+INDEX_COMBINE(t1i1i2)*/c1,c2FROMt1WHEREc1=0ORc2=0;©2005JulianDykejuliandyke.com15BitmapMinusOperationIntroducedinOracle7.3PerformslogicalMINUSoperationbetweentwobitmapsCREATETABLEt1(c1NUMBER,c2NUMBER);CREATEBITMAPINDEXi1ONt1(c1);CREATEBITMAPINDEXi2ONt1(c2);0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(BYINDEXROWID)OF'T1‘21BITMAPCONVERSION(TOROWIDS)32BITMAPMINUS43BITMAPMINUS54BITMAPINDEX(SINGLEVALUE)OF'I1‘64BITMAPINDEX(SINGLEVALUE)OF'I2‘73BITMAPINDEX(SINGLEVALUE)OF'I2'SELECT/*+INDEX_COMBINE(t1i1i2)*/c1,c2FROMt1WHEREc1=0ANDNOTc2=0;©2005JulianDykejuliandyke.com16BitmapMergeOperationIntroducedinOracle7.3MergestwoormorebitmapstogetherCREATETABLEt1(c1NUMBER,c2NUMBER);CREATEBITMAPINDEXi1ONt1(c1);CREATEBITMAPINDEXi2ONt1(c2);0SELECTSTATEMENTOptimizer=CHOOSE10TABLEACCESS(BYINDEXROWID)OF'T1'21BITMAPCONVERSION(TOROWIDS)32BITMAPAND43BITMAPINDEX(SINGLEVALUE)OF'I2‘53BITMAPMERGE65BITMAPINDEX(RANGESCAN)OF'I1'SELECT/*+INDEX_COMBINE(t1i1i2)*/c1,c2FROMt1WHEREc10ANDc2=0;©2005JulianDykejuliandyke.com17BitmapConstruction/CompactionIntroducedinOracle7.3Usedbyindexcreation/rebuildoperationsAppearinEXPLAINPLANDonotappearinAUTOTRACEorV$SQL_PLANCREATETABLEt1(c1NUMBER);0CREATEINDEXSTATEMENTOptimizer=CHOOSE10INDEXBUILD(NONUNIQUE)OF'I1‘21BITMAPCOMPACTION32SORT(CREATEINDEX)43BIT
本文标题:BitmapIndexInternals
链接地址:https://www.777doc.com/doc-6411424 .html