Кто-нибудь знает, что было бы более эффективно и использовало бы меньше ресурсов:
Метод 1 - Использование одного оператора SELECT для получения данных из одной таблицы, а затем итерация по ней для выполнениянесколько обновлений на другой таблице.EG (псевдокод, execute () выполняет запрос):
Query1_resultset = execute("SELECT item_id, sum(views) as view_count FROM tableA WHERE condition=1");
while(Query1_resultset as row) {
execute("UPDATE tableB SET view_count=row.view_count WHERE id=row.item_id");
}
Метод 2 - использовать один оператор INSERT .. ON DUPLICATE KEY UPDATE с вложенным оператором SELECT.EG:
INSERT INTO tableB (id, view_count) SELECT item_id, SUM(views) as view_count FROM tableA WHERE condition=1 ON DUPLICATE KEY UPDATE view_count=VALUES(view_count);
Примечание. Идентификатор в таблице B является первичным ключом.Там на самом деле не будет никаких вставок, потому что я знаю, что ключ будет существовать.Так что это все ОБНОВЛЕНИЯ.Просто с помощью этого оператора, чтобы передать один запрос, а не несколько.
Мне действительно любопытно, почему любой из них будет более эффективным.Количество запросов определяет, насколько быстро он будет выполняться?Где узкое место?Я ищу что-то, что будет масштабироваться (число обновляемых строк растет с каждым днем).
Есть идеи?
Спасибо