2010-11-10 25 views
7

Tôi chỉ được yêu cầu thực hiện RTRIM() trong một số phần của truy vấn nhưng nếu tôi thực hiện TRIM() sẽ ảnh hưởng đến hiệu suất.TRIM RTRIM Hiệu suất LTRIM

Trim() chậm/nhanh/Chính xác cùng (KHÔNG thậm chí đã chênh lệch không đáng kể) so với RTRIM()LTRIM()?

Điều này liên quan đến Oracle 10g ONLY.

Nhưng trong trường hợp SQL Server 2005, Chúng ta có hàm/phương thức 'x()' sao cho nó có thể thay thế RTRIM(LTRIM(' blah.. blah.. ')) thành một hàm duy nhất?

Tôi chỉ đơn giản có nghĩa là có chức năng "đơn" để thực hiện chức năng tương tự cả hai chức năng RTRIM() AND LTRIM().

Trả lời

6

Dựa trên thử nghiệm thô này có sự khác biệt nhỏ:

DECLARE 
n PLS_INTEGER := DBMS_UTILITY.get_time; 
s1 VARCHAR2(32767); 
s2 VARCHAR2(32767); 
BEGIN 
s1 := LPAD('X',15000,' ') || RPAD('X',15000,' '); 
FOR i IN 1..1000000 LOOP 
    NULL; 
END LOOP; 
DBMS_OUTPUT.put_line('Baseline: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := LTRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('LTRIM: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := RTRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('RTRIM: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := TRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('TRIM: ' || (DBMS_UTILITY.get_time - n)); 
END; 

Sự khác biệt số tiền lên đến 0,000128 của trăm của một giây trong trường hợp xấu nhất:

Baseline: 0 
LTRIM: 113 
RTRIM: 103 
TRIM: 8 
Baseline: 0 
LTRIM: 136 
RTRIM: 133 
TRIM: 8 
+0

Sự khác biệt có thể được giải thích bởi thực tế là LTRIM và RTRIM có thể cắt một bộ * ký tự, trong khi TRIM chỉ phải tìm một ký tự đơn. –

+0

Cảm ơn bạn đã phân tích và giải thích.Nhưng những gì trong trường hợp TRIM ("cụ thể-chuỗi-of-chars-thay vì-không gian-chỉ"). – Pratik

+0

Ok, thay đổi 's1: = LPAD ('X', 32000, 'X');' và chênh lệch hiệu suất được giảm - nhỏ hơn 0.000091 trăm phần nghìn giây. –

3

Sự khác biệt về hiệu suất nói chung sẽ không thể phát hiện được, đặc biệt nếu nó nằm trong truy vấn lấy dữ liệu từ bảng. Chọn bất cứ điều gì phù hợp với yêu cầu của bạn.

+2

Bất kể sự khác biệt nhỏ hoặc không phát hiện được trong TRIM() và LTRIM()/RTRIM() ảnh hưởng đến hiệu ứng như thế nào, ngay cả khi độ lớn tối thiểu/không thể nhận ra? – Pratik

+1

Nếu sự khác biệt là không thể phát hiện, điều đó có nghĩa là chúng tôi không thể nói chắc chắn liệu một phương pháp có nhanh hơn phương pháp kia hay không. Đó là những gì "không thể phát hiện" có nghĩa là. –

+0

Cảm ơn cho một ví dụ tốt. Theo tôi TRIM() sẽ chậm hơn RTRIM() hoặc LTRIM() nhưng tôi không biết thuật toán được sử dụng phía sau hoặc mã bên trong nó, vì vậy tôi đã cố gắng tìm giải thích hoặc mâu thuẫn với niềm tin. – Pratik

0

Tôi chưa bao giờ thấy bất kỳ điều gì giống như điểm chuẩn trên Trims trong SQL Server. Tôi đã sử dụng nó rất nhiều và tìm thấy một số hiệu suất nhỏ khi giao dịch với rất nhiều dữ liệu ... hiệu suất nhỏ.

+0

Bất kể sự khác biệt nhỏ hoặc không thể phát hiện được trong TRIM() và LTRIM()/RTRIM() nó ảnh hưởng như thế nào đến hiệu suất, ngay cả khi nó có độ lớn tối thiểu/không thể nhận ra? – Pratik

2

Câu hỏi đặt ra là không thích hợp cho SQL Server, vì nó triển khai LTRIMRTRIM nhưng không thực hiện TRIM.

Xem danh sách SQL 2005 string functions.