sql优化 SELECT PARENT_ORG_ID FROM TD_BFM_ORG WHERE PARENT_ORG_ID NOT IN (SELECT DISTINCT ORG_ID FROM TD_BFM_ORG)
时间: 2023-07-24 15:46:23 浏览: 107
sql数据库优化.。
这个 SQL 语句的意思是查询 `TD_BFM_ORG` 表中所有不在 `TD_BFM_ORG` 表中 `ORG_ID` 字段中出现过的 `PARENT_ORG_ID` 字段值。
优化可以从以下几个方面入手:
1. 使用 `NOT EXISTS` 替代 `NOT IN`,因为 `NOT IN` 的子查询结果集中如果存在 NULL 值,那么整个查询结果都是空的,而 `NOT EXISTS` 没有这个问题。
2. 添加索引:可以为 `TD_BFM_ORG` 表的 `PARENT_ORG_ID` 字段和 `ORG_ID` 字段分别创建索引,这样可以加快查询速度。
3. 减少子查询:可以将 `DISTINCT` 替换成 `GROUP BY`,这样可以减少子查询的数量。
优化后的 SQL 语句如下:
```sql
SELECT PARENT_ORG_ID
FROM TD_BFM_ORG t1
WHERE NOT EXISTS (
SELECT 1
FROM TD_BFM_ORG t2
WHERE t2.ORG_ID = t1.PARENT_ORG_ID
)
```
并且为 `PARENT_ORG_ID` 和 `ORG_ID` 分别创建索引:
```sql
CREATE INDEX idx_parent_org_id ON TD_BFM_ORG(PARENT_ORG_ID);
CREATE INDEX idx_org_id ON TD_BFM_ORG(ORG_ID);
```
阅读全文