SELECT a.* FROM MA_TERMINAL_INFO a INNER JOIN( SELECT a.LOGIN_NAME FROM PT_USER a INNER JOIN PT_ORGANIZATION b ON a.ORG_ID = b.ID AND b.ID IN( SELECT ID FROM PT_ORGANIZATION WHERE PATH LIKE '0.orgRootDomain.3190000005Y0000.319130000X00000.319130000XY0200.319131000500000.%' ) ) b ON a.REGISTER_USER = b.LOGIN_NAME 对这段sql 优化
时间: 2024-02-27 13:52:35 浏览: 61
Event filter with query SELECT * FROM __InstanceModificationEvent WITHIN
这段 SQL 可以进行以下优化:
1. 使用 EXISTS 替换 INNER JOIN 子查询:
```
SELECT a.*
FROM MA_TERMINAL_INFO a
WHERE EXISTS (
SELECT 1
FROM PT_USER b
INNER JOIN PT_ORGANIZATION c ON b.ORG_ID = c.ID
WHERE c.PATH LIKE '0.orgRootDomain.3190000005Y0000.319130000X00000.319130000XY0200.319131000500000.%'
AND a.REGISTER_USER = b.LOGIN_NAME
)
```
2. 对 PT_USER 表和 PT_ORGANIZATION 表的 PATH 字段建立索引,以加速 LIKE 操作。
3. 对 MA_TERMINAL_INFO 表的 REGISTER_USER 字段建立索引,以加速 JOIN 操作。
4. 根据实际情况调整 LIKE 操作的模式,避免全表扫描。例如,如果路径中的数字都是固定长度的,可以使用类似 '123%' 的前缀匹配方式。
阅读全文