Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Добавление в таблицу столбца
Reh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 524
Пользователь №: 38684
На форуме: 2 года, 10 месяцев, 24 дня
Карма: 2




Есть таблица auto_modify, примерно 36000 строк, это модификации всех авто, нужно было в нее добавить поле тип КПП(test, varchar), написал запрос так

UPDATE auto_modify as m
SET m.test = (SELECT p.value FROM auto_params p WHERE p.param_id = 16 AND p.modify_id = m.id)
WHERE m.test = 0

Он работает, но пипец как долго, уже 2 часа выполняется. В таблице auto_params примерно 1 500 000 строк. Как можно написать чтобы время выполнения было более разумным?
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25990
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 23 дня
Карма: 725

Не курю:
1 год, 2 месяца, 10 дней



1. я бы в подзапросе использовал LIMIT 1
2.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SELECT .. FOR UPDATE;
UPDATE .... ;
COMMIT TRANSACTION;

хз - алиясы усложняют работу на уровне бд или пофигу, но яб тут не использовал их


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
depp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 297
Пользователь №: 40589
На форуме: 2 года, 3 дня
Карма: 19




а сколько у вас всего типов КПП? и как вы их записываете? почему varchar? есть индексы? какие?

Это сообщение отредактировал depp - 21.03.2016 - 15:16
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Эникейщик
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4053
Пользователь №: 19498
На форуме: 7 лет, 1 месяц, 10 дней
Карма: 89




Переливкой такие апдейты делаются
Создаётся новая таблица, с необходимой структуорой и переливаются в неё данные. Следом таблицы подменяются, а старая удаляется


--------------------
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Reh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 524
Пользователь №: 38684
На форуме: 2 года, 10 месяцев, 24 дня
Карма: 2




Цитата
а сколько у вас всего типов КПП? и как вы их записываете? почему varchar? есть индексы? какие?


Не смотрел все но точно попадались Автоматическая, Роботизированная еще какая то
Так и записываю

Была старая БД, нужно обновить, а в новой другая структура, вот и нужно ее под старую подогнать.

Цитата
1. я бы в подзапросе использовал LIMIT 1

по таким условиям только одна строка подходит p.param_id = 16 AND p.modify_id = m.id
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Эникейщик
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4053
Пользователь №: 19498
На форуме: 7 лет, 1 месяц, 10 дней
Карма: 89




Цитата (Reh @ 21.03.2016 - 14:24)

по таким условиям только одна строка подходит p.param_id = 16 AND p.modify_id = m.id

ещё бы... лимит 1 же


--------------------
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 8 месяцев, 22 дня
Карма: 2




Цитата (Reh @ 21.03.2016 - 15:09)
SELECT p.value FROM auto_params p WHERE p.param_id = 16 AND p.modify_id = m.id


Сколько всего записей в этой таблице? И есть ли составной индекс по полям param_id, modify_id (именно в таком порядке)?


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Reh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 524
Пользователь №: 38684
На форуме: 2 года, 10 месяцев, 24 дня
Карма: 2




auto_params около полутора миллионов строк
param_id, modify_id это первичные колючи других таблиц
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 8 месяцев, 22 дня
Карма: 2




Цитата (Reh @ 21.03.2016 - 17:01)
auto_params около полутора миллионов строк


Вот вам ответ на ваш изначальный вопрос. Если таблица auto_modify содержит порядка 36000 записей (при m.test = 0), то умножьте это число еще на полтора миллиона и вы получите примерное число строк, которое обрабатывает мускуль при вашем апдейте.

Цитата (Reh @ 21.03.2016 - 17:01)
param_id, modify_id это первичные колючи других таблиц


А как они связаны с таблицей auto_params? Если только внешними ключами, то они не работают при выборке. Надо делать составной ключ на эти два поля, но с таким количеством записей это тоже процесс не быстрый

Это сообщение отредактировал DragonNoir - 21.03.2016 - 17:17


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Reh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 524
Пользователь №: 38684
На форуме: 2 года, 10 месяцев, 24 дня
Карма: 2




Проблема решена, выбрал все данные которые нужно вставить, так же все ид итоговой таблицы и
тупо сделал запрос на обновление в цикле. Заняло где то минуту. Спасибо за участие.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса