日期:2014-05-16  浏览次数:20456 次

巧用函数索引性能调优

   今天调了一条SQL,执行计划中出现BITMAP CONVERSION,检查了下索引,没有位图索引啊。原来是Oracle有时候会选择将B-Tree索引进行BITMAP转换来进行SQL执行,从而导致极其恶劣的执行计划。在下列计划中BITMAP CONVERSION FROM / TO ROWIDS 就是进行了位图转换后的执行计划:

SQL> SELECT *

  2    FROM (SELECT  A.ASSET_ID,
  3                 C.CLASSIFY_CODE,
  4                 C.CLASSIFY_NAME,
  5                 V.NOMINAL_VOLTAGE BASE_NOMINAL_VOLTAGE,
  6                 TO_CHAR(SDO_UTIL.TO_GMLGEOMETRY(A.G3E_GEOMETRY)) AS GML
  7          FROM DM_ASSET A, DM_CLASSIFY C, DM_BASE_VOLTAGE V
  8          WHERE A.CLASSIFY_ID = C.CLASSIFY_ID
  9             AND A.BASE_VOLTAGE_ID = V.BASE_VOLTAGE_ID(+)
 10             AND C.CLASSIFY_ID = '7002321'
 11             AND SDO_RELATE(A.G3E_GEOMETRY,
 12                            SDO_GEOMETRY(3003,
 13                                         4326,
 14                                         NULL,
 15                                         SDO_ELEM_INFO_ARRAY(1, 1003, 1),
 16                                         SDO_ORDINATE_ARRAY(113.93897922622,
 17                                                            22.806658666304,
 18                                                            0,
 19                                                            114.38475977774,
 20                                                            22.806658666304,
 21                                                            0,
 22                                                            114.38475977774,
 23                                                            22.42623