SELECT t.fldinfo_name paramkey, COUNT( a.record_id ) paramvalue FROM fstaid_fld_info t LEFT JOIN fstaid_cs_record_mx a ON a.fld_code = 'CS_JBXX_mpds_syndrome_id' AND TO_CHAR ( a.fld_value_pcts ) = t.fldinfo_code AND TO_CHAR ( a.fld_value_pcts ) IS NOT NULL AND a.record_id IN ( SELECT record_id FROM fstaid_record WHERE jijiu_type = '3' AND delete_flag = '0' ) WHERE t.delete_flag = '0' AND t.fld_code = 'CS_JBXX_mpds_syndrome_id' GROUP BY t.fldinfo_name; 优化语句
时间: 2023-08-17 09:04:10 浏览: 343
SQL 的 SELECT 语句优化
这是一条 SQL 查询语句,可以尝试对其进行以下优化:
1. 使用表别名,使 SQL 语句更易读。
2. 将子查询拆分成一个单独的查询,减少嵌套子查询的复杂度。
3. 使用 INNER JOIN 代替 LEFT JOIN,因为左连接会对查询性能产生负面影响。
4. 将 WHERE 条件中的常量放到左边,将字段放到右边,以利用索引。
5. 将常量 '3' 和 '0' 改为整型数字 3 和 0。
优化后的 SQL 查询语句如下:
```sql
SELECT t.fldinfo_name AS paramkey, COUNT(a.record_id) AS paramvalue
FROM fstaid_fld_info t
INNER JOIN fstaid_cs_record_mx a ON a.fld_code = 'CS_JBXX_mpds_syndrome_id'
AND TO_CHAR(a.fld_value_pcts) = t.fldinfo_code
AND TO_CHAR(a.fld_value_pcts) IS NOT NULL
AND a.record_id IN (SELECT record_id FROM fstaid_record WHERE jijiu_type = 3 AND delete_flag = 0)
WHERE t.delete_flag = 0
AND t.fld_code = 'CS_JBXX_mpds_syndrome_id'
GROUP BY t.fldinfo_name;
```
这样可以减少嵌套子查询的复杂度,提高查询性能。同时,可以根据实际情况考虑为字段 fld_code 和 delete_flag 建立索引,以进一步提高查询性能。
阅读全文