sql - 如何在不等于,NOT IN的情况下重写查询?
问题描述
我有一个用 NOT IN 和 <> 编写的查询。由于 NOT IN 和 Not equal 运算符,它花费了很多成本。下面是查询
SELECT NVL (SUM (NVL (I.AMOUNT, 0)), 0)
FROM Start_tb C,
End_tb I
WHERE C.Start_key = :B3
AND I.End_key = C.End_key
AND I.Com_number <> :B2
AND NVL (I.Process_typ, 'NA') = 'H'
AND NVL (I.Code, 'Elp_01') = :B1
AND I.Typ_id NOT IN (3, 4);
以下是解释计划详情
Plan hash value: 34574793
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3648 (100)| |
| 1 | SORT AGGREGATE | | 1 | 49 | | |
| 2 | NESTED LOOPS | | 1 | 49 | 3648 (2)| 00:00:01 |
| 3 | NESTED LOOPS | | 1 | 49 | 3648 (2)| 00:00:01 |
|* 4 | INDEX STORAGE FAST FULL SCAN| Index_clm | 1 | 13 | 3646 (2)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | Index_range | 1 | | 1 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID | End_tb | 1 | 36 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
我可以重写此查询以提高性能吗?
解决方案
最后一行可以不是这样吗: AND I.type != 3 AND I.type != 4 那么你没有使用“not in”
推荐阅读
- excel - 添加可以在用户表单中编辑的表格
- django - SESSION_EXPIRE_AT_BROWSER_CLOSE 不工作
- django - 在 django 中获取不通过数据库的子模型
- unix - 粘贴 - 空列
- flutter - 调试颤振控制台充满随机错误消息
- javascript - VSCode:设置中的 TypeScript 扩展
- javascript - 无法连接到 localhost 端口 8000:Node.js 中的连接被拒绝
- javascript - AJAX 附加结果重复
- python - 如何在 Python 中使用正则表达式提取格式化字符串?
- css - 如何使用斜线分隔符创建两种颜色的内容?