Задать вопрос
@maryaTurova

Возможно ли уменьшить время запроса?

На сервер в виде json заливаются картинки в формате base 64.
В таком виде
{"name":"tfENuLsKgcMLGDDgpfB7gBbc2jyVyw","metod":"main_two","link":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAgAElEQVR4nOy9dXxTyf64nzZJkzoVaKlSKIXivsgCCyws7g4tWtyluMMii8viVtxZrLgu7la0pe5u0XOe3x+pIGXl3vvdz70\/Oq\/X8yJNTtJDzswzc97}

Этим кодом я получаю 10 первых для последующей обработки:
<?php
		include ("bd.php");
		
		$response = [];
		$count = 1;
		$result = mysqli_query(
			$db,"SELECT `set_json`,`hash` FROM `pictures` WHERE `result`='WAITING' AND DATE(date) ORDER BY `pictures`.`date` ASC LIMIT 10"
			);
			
		while ($row = mysqli_fetch_array($result)) {
			$response[$count]= json_encode(unserialize($row[0]));
			$count +=1;
			mysqli_query ($db,"UPDATE `pictures` SET `result`='PROCESS' WHERE `hash`='$row[1]'");
		}
		echo json_encode($response);
?>

Дело в том что эта операция занимает несколько секунд .
Что делаю не так?
Как правильно оптимизировать?
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@aleksmir
Системный администратор, программист
Приведите пожалуйста код создания структуры таблицы pictures, тогда будет более предметный разговор. Сколько записей в таблице pictures?
Из общих рекомендаций:
1) `result`='WAITING' - поле должно быть проиндексировано, иначе запись ищется полным перебором всех записей;
2) условие DATE(`date`) точно правильно написано?
3) если ищете по дате, то поле `date` тоже должно быть проиндексировано;
4) лучше вместо отдельных индексов использовать составной индекс INDEX `result_date` (`result`, `date`);
5) проверьте свои запросы SELECT и UPDATE с помощью команды EXPLAIN, по ней можно будет посмотреть - где происходят тормоза;
6) у вас в этом коде PHP происходит до 11 обращений к БД; операция UPDATE наиболее медленная, вполне вероятно, что она и выполняется в течение нескольких секунд 10 раз; но если будет индекс, то проблем не должно быть;
7) если не поможет, то несколько запросов UPDATE можно заменить одним запросом с помощью функций обновления через условие;
8) кстати для поля `hash` также нужен индекс, раз по нему выполняется поиск;
9) ещё бы я рекомендовал ключ сделать числовым, т.е. `hash` заменить на поле `id` типа UNSIGNED INT AUTOINCREMENT и сделать его ключом PRIMARY KEY;
10) поле `result` тоже нужно сделать числовым и записывать в него, например число 0, если 'WAITING' и 1, если 'PROCESS'.

Уверен, что после выполнения рекомендаций все будет "летать".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽