0

Oracle SQL Update を高速化する方法、テーブルには約 500 万のレコードが含まれています。

update TableName set    
ColumnName1= TRANSLATE (Columnname1,
   '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
   '9876543210zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA'),
ColumnName2=  '';

更新には20分かかります。

クエリを高速化するにはどうすればよいですか?

4

3 に答える 3

1

翻訳部分と更新部分に分割できます。

翻訳部分 (データベースをロックせずに):

select     
 TRANSLATE (
     Columnname1,
     '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
     '9876543210zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA') AS ColumnName1
, ' ' AS ColumnName2
from TableName;

更新部分: たとえば、このように sql-loader を使用できます。

于 2013-09-16T06:24:53.087 に答える
-1

これはより速く動作する可能性があります。

update TableName set
ColumnName1 = replace(replace(replace(@Columnname1 COLLATE Latin1_General_CS_AS,'0123456789', '9876543210')COLLATE Latin1_General_CS_AS,'abcdefghijklmnopqrstuvwxyz','zyxwvutsrqponmlkjihgfedcba')COLLATE Latin1_General_CS_AS,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','ZYXWVUTSRQPONMLKJIHGFEDCBA') 
ColumnName2 = '' ;

以前のクエリよりも優れているかどうか教えてください。

于 2013-09-16T06:17:39.107 に答える