select id,drg01,drg02,drg03,form,cag01,d.cag02,isotc,isbase,iswarn,isfz,isrm,isxfj,isaid,isnut,way,fda,ant,ddd, dddunit,step,interact,remarks from rat_drg d where 1 = 1 and not exists(select 1 from chr_path_drg p where p.drg01 = d.drg01 and p.state !=9 order by d.id desc) 优化
时间: 2023-10-02 19:06:56 浏览: 132
这段 SQL 查询语句可以进行如下优化:
1. 将 "1=1" 删除,因为不影响查询结果。
2. 将 "order by d.id desc" 删除,因为子查询中不需要排序。
3. 使用 LEFT JOIN 代替子查询,可以减小查询开销。
4. 对于连表查询中的表,应该添加索引以提高查询效率。
优化后的 SQL 查询语句如下:
SELECT
id,
drg01,
drg02,
drg03,
form,
cag01,
d.cag02,
isotc,
isbase,
iswarn,
isfz,
isrm,
isxfj,
isaid,
isnut,
way,
fda,
ant,
ddd,
dddunit,
step,
interact,
remarks
FROM
rat_drg d
LEFT JOIN chr_path_drg p ON p.drg01 = d.drg01
AND p.state != 9
WHERE
p.drg01 IS NULL;
同时,应该为 rat_drg 表中的 drg01 字段和 chr_path_drg 表中的 drg01 字段添加索引以提高查询效率。
相关问题
优化这条sql语句:select id,drg01,drg02,drg03,form,cag01,d.cag02,isotc,isbase,iswarn,isfz,isrm,isxfj,isaid,isnut,way,fda,ant,ddd, dddunit,step,interact,remarks from rat_drg d where 1 = 1 and not exists(select 1 from chr_path_drg p where p.drg01 = d.drg01 and p.state !=9 order by d.id desc)
您好!针对这条 SQL 语句,我建议您可以尝试以下优化:
1. 对于子查询中的条件 `p.state !=9`,可以将其改写为 `p.state = 9`,并使用 `NOT IN` 替代 `NOT EXISTS`,这样可以更直接地过滤出符合条件的 `rat_drg` 表中的数据,同时也能减少子查询的执行次数。
2. 对于 `1 = 1` 这个条件,可以将其删除,因为它不会对查询结果产生任何影响。
3. 对于 `order by d.id desc` 这个子句,可以考虑将其删除,因为 `NOT EXISTS` 中不需要进行排序操作。
综上,您可以尝试使用以下 SQL 语句进行优化:
```
SELECT id, drg01, drg02, drg03, form, cag01, d.cag02, isotc, isbase, iswarn, isfz, isrm, isxfj, isaid, isnut, way, fda, ant, ddd, dddunit, step, interact, remarks
FROM rat_drg d
WHERE NOT EXISTS (
SELECT 1
FROM chr_path_drg p
WHERE p.drg01 = d.drg01 AND p.state = 9
)
```
希望这些优化能够对您有所帮助!
优化这条sql语句的查询速度:select id,drg01,drg02,drg03,form,cag01,d.cag02,isotc,isbase,iswarn,isfz,isrm,isxfj,isaid,isnut,way,fda,ant,ddd, dddunit,step,interact,remarks from rat_drg d where 1 = 1 and not exists(select 1 from chr_path_drg p where p.drg01 = d.drg01 and p.state !=9 order by d.id desc)
针对这条 SQL 语句查询速度的优化,我建议您可以尝试以下几种方法:
1. 索引优化:可以为 `rat_drg` 表中的 `drg01` 字段和 `chr_path_drg` 表中的 `drg01` 和 `state` 字段建立联合索引,以加快查询速度。
2. 子查询优化:可以将 `NOT EXISTS` 子查询改为左连接查询,并使用 `IS NULL` 来判断未匹配的数据。这样可以避免子查询的重复执行,同时也能加快查询速度。
3. 删除不必要的字段:可以只查询需要的字段,而不是全部查询。这样可以减少 I/O 开销,从而提高查询速度。
综上,您可以尝试使用以下 SQL 语句进行优化:
```
SELECT d.id, d.drg01, d.drg02, d.drg03, d.form, d.cag01, d.cag02, d.isotc, d.isbase, d.iswarn, d.isfz, d.isrm, d.isxfj, d.isaid, d.isnut, d.way, d.fda, d.ant, d.ddd, d.dddunit, d.step, d.interact, d.remarks
FROM rat_drg d
LEFT JOIN chr_path_drg p ON p.drg01 = d.drg01 AND p.state = 9
WHERE p.drg01 IS NULL
```
同时,为 `rat_drg` 表中的 `drg01` 字段和 `chr_path_drg` 表中的 `drg01` 和 `state` 字段建立联合索引,可以进一步提高查询速度。
希望这些优化能够对您有所帮助!
阅读全文