Какой запрос быстрей и оптимальней из двух?

Какой запрос быстрей и оптимальней из двух?

INSERT IGNORE INTO table (id,Rating) 
VALUES(SELECT id FROM data WHERE data.Name='Vasya',0)


или

INSERT IGNORE INTO table (id,Rating) 
SELECT id,0 
FROM data WHERE data.Name='Vasya'


_______________________________________________________________________

UPDATE table INNER JOIN second on second.id= table.id SET table.Rating=1 WHERE second.Name='Test'

или

UPDATE table SET Rating=1 WHERE id=(SELECT id FROM second WHERE Name='Test')


А есть ли ещё способ ускорить такие запросы?
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 3
orlov0562
@orlov0562
I'm cool!
Я думаю, что оба запроса будут +/- одинаково по скорости работать. Как и написали выше, легче всего самостоятельно проверить. Тот же phpMyAdmin, пишет за сколько выполнился запрос.

В остальном же, подобные решения не рекомендую использовать. Если нужно регулярно гонять таким образом кучу данных, то где-то в архитектуре есть большая проблема и надо исправлять именно её (ну, например, таблицу table заполнять, сразу по добавлению записи в таблицу data).
Ответ написан
Комментировать
@heahoh
Full stackoverflow developer
SET profiling = 1;
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1; # id необходимого запроса
Ответ написан
Комментировать
@AntonDrelin
По INSERT, одинаковые

По UPDATE:
UPDATE table SET Rating=1 WHERE id=(SELECT id FROM second WHERE Name='Test')
по UPDATE в первом случае MySQL должна выполнить join, а потом update.

Ускорить DDL запросы, которые связаны на вставку или обновления, они всегда медленные по сравнению с обычными SELECT.

Можно поменять тип таблицы, в зависимости от этого можно добиться небольшого ускорении, но не сильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы