您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

存储过程SQL执行计划

存储过程SQL执行计划

假设这in_id一个查询参数-不是列名:

不管输入什么,查询都必须只有一个执行计划。因此,如果将参数传递 in_id为NULL,则应该返回所有行。如果传递非NULLin_id,则应仅返回单个PK值。

因此,Oracle选择了“最糟糕的”执行程序。计划应对“最坏的情况”。“通用”查询是通向地狱的道路。只需将查询分为两个即可。

select col1, col2, col3
from table1 tab
where in_id is null or in_id is not null;

这将使用全表扫描,这是获取所有行的最佳方法

select col1, col2, col3
from table1 tab
where tab.id = in_id;  -- tab.id is the PK

这将使用UNIQUE索引扫描,这是获取单个索引行的最佳方法

SQLServer 2022/1/1 18:31:32 有488人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶