【发布时间】:2015-01-31 20:16:45
【问题描述】:
我的查询很慢,我想优化它。我已经为连接的字段创建了索引。我的查询是这样的:
SELECT DISTINCT
--a.row_id FK_SERVIZIO,
--CLI_UNICO.FK_CLIENTE FK_CLIENTE,
CLI.CDC_FISCALE CDC_FISCALE,
--com.descrizione
--CASE WHEN conc.COMUNE IS NOT NULL THEN 1 ELSE 0 END FL_OFFERTABILITA_GAS
CASE WHEN exists (select 1 from STG.T_STG_NBA_DT_S_ASSET_G a where a.owner_accnt_id=CLI.IDC_CLIENTE_CRM_KEY and status_cd in ('ATTIVATO'))
THEN 'SI' ELSE 'NO' END FLC_COMUNE_TERR
FROM STG.T_STG_NBA_DT_S_ASSET_G A,
STG.T_STG_PSP_DT_LISTA_COMUNI_TERR terr,
STG.T_STG_NBA_DT_R2DG_COMUNI_G com,
STG.T_STG_NBA_DT_S_ADDR_PER_G ind_for,
--STG.V_DML_NBA_SITO q,
ODS.T_ODS_CRM_DT_CLIENTI_CRM CLI,--ODS.V_ODS_NBA_DT_ASS_CLI_CLIUNICO CLI_UNICO,
STG.T_STG_NBA_DT_S_ORG_EXT_G cforn
--STG.T_STG_NBA_DT_R2DG_CONCESS_G conc,
WHERE
--CLI.IDC_CLIENTE_CRM_KEY=A.OWNER_ACCNT_ID
terr.LDS_DESCRIZIONE_COMUNE=com.DESCRIZIONE
AND com.CODICE_ISTAT=ind_for.x_cod_istat
AND ind_for.row_id = cforn.PR_ADDR_ID
and cforn.row_id=A.serv_acct_id
我在这个字段上放了索引:
terr.LDS_DESCRIZIONE_COMUNE,com.DESCRIZIONE,com.CODICE_ISTAT,ind_for.x_cod_istat,ind_for.row_id,cforn.PR_ADDR_ID,cforn.row_id,A.serv_acct_id,a.owner_accnt_id,CLI.IDC_CLIENTE_CRM_KEY, a.status_cd.
请问有什么建议吗? 我可以使用并行吗?如何? 谢谢
【问题讨论】:
-
6 个表,只有 4 个连接对我来说看起来很可疑!
-
有5个join,还有:select 1 from STG.T_STG_NBA_DT_S_ASSET_G a where a.owner_accnt_id=CLI.IDC_CLIENTE_CRM_KEY and status_cd in ('ATTIVATO'))
-
WHERE (1) terr.LDS_DESCRIZIONE_COMUNE=com.DESCRIZIONE (2) AND com.CODICE_ISTAT=ind_for.x_cod_istat (3) AND ind_for.row_id = cforn.PR_ADDR_ID (4) 和 cforn.row_id=A .serv_acct_id (5) ???
-
看看开始:SELECT DISTINCT CLI.CDC_FISCALE CDC_FISCALE, --com.descrizione --CASE WHEN conc.COMUNE IS NOT NULL THEN 1 ELSE 0 END FL_OFFERTABILITA_GAS CASE WHEN 存在(从 STG.T_STG_NBA_DT_S_ASSET_G 中选择 1 a where a.owner_accnt_id=CLI.IDC_CLIENTE_CRM_KEY and status_cd in ('ATTIVATO'))
-
以及如何修改我的查询?
标签: database oracle performance indexing