Как оптимизировать запрос Select и последующий цикл с update?

Друзья, подскажите, пожалуйста, как оптимизировать следующие запросы? Есть ли какие-то конструкции, чтобы не делать запросы в цикле?
Таких запросов в скрипте 4..
$na=1;
$db->query( "SELECT id, rat, ratkol FROM products Where status != 2 ORDER BY rat DESC" );
while ( $tt = $db->get_row() ) {
    mysql_query("INSERT INTO dynamika (idprod, date, place, points, kolgol,act) values ('".$tt['id']."', '".$today."', '".$na++."', '".$row['rat']."', '".$row['ratkol']."', '0')"); 
}

В выше написанном запросе идет вставка данных продукта(место в рейтинге, количество голосов) в таблицу "динамики". С помощью таблицы динамики показывается динамика продукта (место в рейтинге, сколько голосов и т.п.)

В следующем запросе идет вставка в таблицу продукта Чтобы вывести место в рейтинге, которое продукт занимал неделю назад..
$gg = $db->query( "SELECT idprod, place FROM dle_dynamika Where date <= '$today' - INTERVAL 7 DAY AND act = '0'" );
while ( $row = $db->get_row($gg) ) {
$db->query("UPDATE dle_products SET topd='$row[place]' WHERE id = '" . intval($row[idprod]) . "'");
}

Буду очень благодарен за любые подсказки..
  • Вопрос задан
  • 399 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
1. Вставки оптимизировать можно собирая в скрипте все данные для вставки и потом в базу делая один запрос на вставку вида
INSERT INTO `table` (`a`,` b`) VALUES (1,2), (3,4), (5,6)


2. Задача оптимизации массовых обновлений более интересна.
Есть несколько путей решения.
а) можно например делать insert on duplicate key update
б) можно сделать tmp таблицу вида idprod, place а потом делать update products left join tmp ...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aaadddminnn
@aaadddminnn
php it ubuntu debian
Не нету. Посоветую использовать mysqli (на 30% быстрее мускуля работает)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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