有关sql脚本性能的问题

时间:2019-09-27 16:36:46

标签: mysql sql

我对脚本的性能有疑问。我有一个这样的存储过程:

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时,数据库是使用完全扫描还是索引扫描。

好吧,我添加了一个限制条款,但在这种情况下不相关。 谢谢。

1 个答案:

答案 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;