select top 3 v1.fscph,v4.fsmjid from jr_hc_hczl v1 left join jr_hc_hczlentry v2 on v1.fid=v2.fparentid left join jr_hc_smjdjentry v4 on v2.fsmjid=v4.fentryid where v1.fscph like '%0606%' order by v1.fscph desc 优化
时间: 2023-07-15 08:15:03 浏览: 58
可以考虑以下优化方案:
1. 添加索引
在 `jr_hc_hczl` 表的 `fscph` 字段上添加索引,可以减少查询时的扫描范围,提高查询效率。
2. 减少关联表的数量
将关联表的数量尽量减少到最少,可以减少查询时的复杂度。在此语句中,可以将 `jr_hc_hczlentry` 表的关联去掉,改为直接在 `jr_hc_hczl` 表中查询 `fsmjid` 字段。
3. 使用 EXISTS 替代 LEFT JOIN
使用 EXISTS 替代 LEFT JOIN,可以减少查询时的复杂度,提高查询效率。
综上所述,可以优化为以下 SQL 语句:
```
SELECT TOP 3 v1.fscph, v4.fsmjid
FROM jr_hc_hczl v1
INNER JOIN jr_hc_smjdjentry v4 ON v1.fid = v4.fparentid
WHERE v1.fscph LIKE '%0606%' AND EXISTS (
SELECT 1 FROM jr_hc_hczlentry v2 WHERE v1.fid = v2.fparentid AND v4.fentryid = v2.fsmjid
)
ORDER BY v1.fscph DESC
```
注意:具体的优化方案需要根据实际情况进行调整和优化。
相关问题
select v4.fsmjid from jr_hc_hczl v1 left join jr_hc_hczlentry v2 on v1.fid=v2.fparentid left join jr_hc_smjdjentry v4 on v2.fsmjid=v4.fentryid where v1.fscph=(select MAX(fscph) from jr_hc_hczl where fscph like '%0606%') 优化
这个SQL语句可以进行如下优化:
```sql
SELECT v4.fsmjid
FROM jr_hc_hczl v1
LEFT JOIN jr_hc_hczlentry v2 ON v1.fid=v2.fparentid
LEFT JOIN jr_hc_smjdjentry v4 ON v2.fsmjid=v4.fentryid
WHERE v1.fscph=(SELECT MAX(fscph) FROM jr_hc_hczl WHERE fscph LIKE '%0606%')
```
1. 将表名和字段名写在反引号中,可以防止与SQL关键字冲突。
2. 使用别名简化表名。
3. 避免使用子查询,可以通过将子查询转换为临时表来避免。
优化后的SQL语句如下:
```sql
SELECT v4.`fsmjid`
FROM `jr_hc_hczl` v1
LEFT JOIN `jr_hc_hczlentry` v2 ON v1.`fid`=v2.`fparentid`
LEFT JOIN `jr_hc_smjdjentry` v4 ON v2.`fsmjid`=v4.`fentryid`
JOIN (SELECT MAX(`fscph`) as `max_fscph` FROM `jr_hc_hczl` WHERE `fscph` LIKE '%0606%') t
ON v1.`fscph` = t.`max_fscph`
```
这样可以避免使用子查询,提高查询效率。同时,加上反引号可以避免与SQL关键字冲突。