2015-11-04 26 views
0

哪個會更好地執行搜索SQL表中的一列: -SQl性能b/w喜歡和修剪

喜歡或修剪。

由於本專欄在開始或結束時都有空格,所以兩者都能達到目的,但哪一個會更快。

感謝

回答

0

你應該建立一個測試,看看它們是如何執行。在下面的例子中,我使用了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