2012-05-30 3 views
0

У меня есть две таблицы под названием Стопы и Stop_Times, они связаны с туристическим агентством. Останавливает запись 8K и таблицу Stop_Times, имеющую 3,2 миллиона записей. Когда я выполняю запрос UPDATE, это занимает слишком много времени. Это заняло 3,5-4 часа, но записи не обновляются. Мой запрос -MySQL Update Query занимает слишком много времени

UPDATE Stops 
    JOIN Stop_Times ON Stops.stop_id = Stop_Times.stop_id 
SET 
    Stops.route_type = Stop_Times.route_type, 
    Stops.agency_id = Stop_Times.agency_id 
WHERE Stops.location_type = 0 

Для этих двух таблиц я использую механизм хранения MyISAM. I hv проиндексировал Стопы и Стоп_Таблицы.

Я использую этот запрос для Linux CentOs.

Есть ли способ увеличить скорость запроса UPDATE?

+0

вы уверены, что столбцы в сравниваемых друг с другом, имеют точно такой же тип? –

+0

Столбец 'Stop_Times.stop_id' уникальный столбец? Если это не так (как я подозреваю по вашим подсчетам строк), вы можете попытаться обновить каждую запись «Stops» несколько раз со значениями из разных строк из «Stop_Times». Возможно, вы также должны фильтровать результаты «Stop_Times»? – lanzz

+0

@Lex, stop_id из обеих таблиц имеют одинаковый тип данных – Deepu

ответ

0

Вы можете попробовать следующий запрос -

UPDATE 
Stops AS s 
LEFT JOIN (
    SELECT 
     route_type, agency_id, stop_id 
    FROM 
     Stop_Times 
    GROUP BY 
     stop_id 
) AS st ON 
    st.stop_id = s.stop_id 
SET s.route_type = st.route_type, s.agency_id = st.agency_id 
1

Возможно, вы захотите продумать, что это означает в вашем приложении, чтобы обновлять небольшой (8K) стол с очень большим набором данных.

Невозможно угадать вашу бизнес-логику из небольшого объема информации, которую вы нам предоставили. Ваш запрос UPDATE выглядит так, как будто он забивает строки в таблице «Стопы», обновляя каждую десятую тысячи раз избыточно.

Обычно при создании небольшой таблицы из большого запроса запрос по большому запросу представляет собой своего рода сводный запрос, содержащий либо GROUP BY, либо DISTINCT ключевых слов. Этот запрос должен содержать правильное количество строк для обновления таблицы меньшего размера.

+0

Спасибо Олли за ваш ответ. Я попробую использовать DISTINCT или GROUP BY. – Deepu

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