我对脚本的性能有疑问。我有一个这样的存储过程:
procedure my_procedure (IN document_number_parameter varchar(100))
begin
select a.id,
b.code
from table_a a
inner join table_b b on a.b_id = b.id
where case when document_number_parameter is null then 1=1
else b.document_number = document_number_parameter
end;
实际上,表b在document_number列中有一个索引。 什么是更好的?该脚本或使用document_number_parameter创建动态查询并按需在脚本中添加“ where”语句?我想知道当 document_number_parameter 不为null时,数据库是使用完全扫描还是索引扫描。
好吧,我添加了一个限制条款,但在这种情况下不相关。 谢谢。
答案 0 :(得分:1)
您不需要动态查询。只需将条件放入过程而不是查询中即可。
IF document_number_parameter IS NULL
THEN
select a.id,
b.code
from table_a a
inner join table_b b on a.b_id = b.id;
ELSE
select a.id,
b.code
from table_a a
inner join table_b b on a.b_id = b.id
WHERE b.document_number = document_number_parameter
END IF;