Oracle SQl性能b/w like和trim

Oracle SQl性能b/w like和trim,oracle,Oracle,对SQL表中的列执行搜索哪个更好:- 喜欢或修剪 因为这列的开头和结尾都有空格,所以两者都可以使用,但哪一个更快呢 谢谢您应该设置一个测试,看看他们的表现如何。在下面的示例中,我使用了dbms_utility.get_time。我测试了两个函数的相同输入,并交替重复测试以排除任何外部影响。 这是一个plsql环境,如果我可以这样称呼它,您应该用实际的表和实际的测试替换查询,并进行更多的sql测试 declare v_start number; v_end number; time_trim nu

对SQL表中的列执行搜索哪个更好:-

喜欢或修剪

因为这列的开头和结尾都有空格,所以两者都可以使用,但哪一个更快呢


谢谢

您应该设置一个测试,看看他们的表现如何。在下面的示例中,我使用了dbms_utility.get_time。我测试了两个函数的相同输入,并交替重复测试以排除任何外部影响。 这是一个plsql环境,如果我可以这样称呼它,您应该用实际的表和实际的测试替换查询,并进行更多的sql测试

declare
v_start number;
v_end number;
time_trim number:=0;
time_like number:=0;
cnt_trim number:=0;
cnt_like number:=0;
begin
for N in 1..10 --repeat test
loop
    for type_oper in 1..2
    loop
        v_start := dbms_utility.get_time;
        for k in (
            select 'abc   ' as col from dual connect by level <= 100000 
            union all
            select 'ccc   ' as col from dual connect by level <= 100000
            union all
            select 'acbc   ' as col from dual connect by level <= 100000
            union all
            select '   acbc   ' as col from dual connect by level <= 100000
        )
        loop
        if type_oper = 1 then
            if trim(k.col) = 'abc' then cnt_trim := cnt_trim + 1; end if;
        else 
            if k.col like '%abc%' then cnt_like := cnt_like + 1; end if;
        end if;
        end loop; --end loop table
        v_end := dbms_utility.get_time;
        if type_oper = 1 then 
            time_trim := time_trim + v_end-v_start;
        else 
            time_like := time_like + v_end-v_start;
        end if;

    end loop; --end loop type
end loop; --end loop repeat test
dbms_output.put_line('time trim:'||time_trim/100);
dbms_output.put_line('time like:'||time_like/100);
end;
/
结果:

cnt微调:1000000次微调:6.33 类cnt:1000000类时间:5.83