为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
SELECT *FROM
ISSC_ISSCDB_USER.XAUTH_MENU
WHERE
EXISTS(
SELECT
1
FROM
ISSC_ISSCDB_USER.XAUTH_MENU XM
JOIN ISSC_ISSCDB_USER.XAUTH_TENANT_MENU_DEFAULT XT ON
XM.MENU_ID = XT.MENU_ID
JOIN ISSC_ISSCDB_USER.XAUTH_ROLE_MENU_DEFAULT RM ON
XT.MENU_ID = RM.MENU_CODE
JOIN ISSC_ISSCDB_USER.XAUTH_PRINCIPAL_ROLE_DEFAULT P ON
RM.ROLE_ID = P.ROLE_ID
AND ((P.PRINCIPAL_TYPE = 'USER'
AND P.PRINCIPAL_ID = 'YCZXGLY')
OR (P.PRINCIPAL_TYPE = 'USER_GROUP'
AND P.PRINCIPAL_ID = 'D1'))
JOIN ISSC_ISSCDB_USER.XAUTH_ROLE_DEFAULT R ON
RM.ROLE_ID = R.ID
WHERE
XM.STATUS = 1
AND XM.STATE != 2
AND R.STATUS = 1
AND XM.TREE_PATH LIKE '%@' || XAUTH_MENU.MENU_ID || '@%')
执行计划如下:慢在XAUTH_PRINCIPAL_ROLE_DEFAULT全表扫描
et耗时
这个XAUTH_PRINCIPAL_ROLE_DEFAULT表PRINCIPAL_ID是有索引的,单独查询执行计划如下:
达梦对以下部分做了优化导致,可以加hint/+enable_in_value_list_opt(0)/看看
AND ((P.PRINCIPAL_TYPE = 'USER'
AND P.PRINCIPAL_ID = 'YCZXGLY')
OR (P.PRINCIPAL_TYPE = 'USER_GROUP'
AND P.PRINCIPAL_ID = 'D1'))
在select 后面加 /* OPTIMIZER_OR_NBEXP(2) */ ,查下试试。