避免对查询进行全扫描

Avoiding fullscan on query

通过这个查询

SELECT * FROM
      (SELECT
          T.*,
          'T'||to_char(min(T.ORDEN_CAMPO) OVER (PARTITION BY T.NOMBRE_ESQUEMA, T.NOMBRE_TABLA, T.CONDICION_ADICIONAL ORDER by T.ORDEN_CAMPO)) ALIAS1
       FROM SOLICITUDES.TBL_QRY_DINAMICO_SOLDEU T
       WHERE
          TIPO_QRY = 'SOLICITUD_DEU' AND
          SUBTIPO_QRY = Numero_Seccion_in
       )
   ORDER BY  ORDEN_CAMPO

我在执行解释计划时得到 TABLE 全面扫描。特别是在完成分区的部分。有没有其他方法可以实现相同的逻辑?

在外面的select语句中,如果我直接调用我想得到的值,我没有得到TFS,但是当我调用ALIAS1时,TFS出现了。

  1. 索引列 ORDEN_CAMPO

  2. TIPO_QRY = 'SOLICITUD_DEU' AND SUBTIPO_QRY = Numero_Seccion_in 筛选的行的份额是多少?如果小于 10%,则对两列进行索引。

  3. 您可以尝试索引列 NOMBRE_ESQUEMA、NOMBRE_TABLA 和 CONDICION_ADICIONAL

注意:正如@xionutz2k 已经提到的,完全 table 扫描在某些情况下可能比索引扫描更有效。如果您提到了所有索引并且解释计划始终显示完整 table 扫描,那么就可以了。