避免对查询进行全扫描
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出现了。
索引列 ORDEN_CAMPO
TIPO_QRY = 'SOLICITUD_DEU' AND SUBTIPO_QRY = Numero_Seccion_in
筛选的行的份额是多少?如果小于 10%,则对两列进行索引。
您可以尝试索引列 NOMBRE_ESQUEMA、NOMBRE_TABLA 和 CONDICION_ADICIONAL
注意:正如@xionutz2k 已经提到的,完全 table 扫描在某些情况下可能比索引扫描更有效。如果您提到了所有索引并且解释计划始终显示完整 table 扫描,那么就可以了。
通过这个查询
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出现了。
索引列 ORDEN_CAMPO
TIPO_QRY = 'SOLICITUD_DEU' AND SUBTIPO_QRY = Numero_Seccion_in
筛选的行的份额是多少?如果小于 10%,则对两列进行索引。您可以尝试索引列 NOMBRE_ESQUEMA、NOMBRE_TABLA 和 CONDICION_ADICIONAL
注意:正如@xionutz2k 已经提到的,完全 table 扫描在某些情况下可能比索引扫描更有效。如果您提到了所有索引并且解释计划始终显示完整 table 扫描,那么就可以了。