2012-06-23 5 views
2

Я использую оракул 10. У меня есть обновление заявление так:Update занимает слишком много времени на Oracle

update table1 t1 
    set v_value=(select v_value 
       from table2 t2 
       where t2.user_id=t1.user_id 
        and t2.item_id=t1.item_id ) 

Он работает, но занимает слишком много времени. Как я могу его оптимизировать?

+1

Каковы ваши показатели? Сколько записей в таблице? – Ben

+0

В дополнение к вопросам @ Бена, каков план запроса? –

ответ

3

Вы можете попробовать совмещенную заявление:

merge into table1 t1 
using 
(
    select user_id, 
      item_id, 
      v_value 
    from table2 
) t2 ON (t1.user_id = t1.user_id and t1.item_id = t1.item_id) 
when matched then update 
    set v_value = t2.v_value; 

(возможно, потребуется проверить синтаксис, были одни и те же изменения, какие части в MERGE являются обязательными и которые не между 10 и 11 - не используется 10g в течение длительного времени)

+0

Хорошо, спасибо, я попробую. – cadyT

+0

Если у вас нет индекса (user_id, item_id), вы должны его создать. Вероятно, это еще быстрее. Возможно также стоит попробовать индекс на table2 (user_id, item_id, v_value), чтобы разрешить поиск только индекса во внутреннем выборе. –

+1

Это действительно плохой совет. Простое изменение SQL-предложений без надлежащего анализа. Это вовсе не инженерный подход. – steve

-3

Практически невозможно настроить утверждение, просто взглянув на него. получите план объяснения, он скажет вам, используете ли вы полное сканирование таблицы (установите autotrace on). Я также предлагаю использовать бесплатный инструмент, я только что разместил - odbtools.com. Он позволяет анализировать ваше заявление и генерировать план объяснения. Он покажет вам, есть ли у вас полное сканирование таблицы, а ваша выбранная часть не использует индекс.

+1

Вы правильно описали свою принадлежность к этому продукту в этом ответе, но мне пришлось удалить другой ответ, потому что это выглядело как astroturfing. Я рекомендую прочитать [эти рекомендации для саморекламы здесь] (http://meta.stackexchange.com/a/59302/135615). –

Смежные вопросы