Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465

Как увеличить производительность при запросе к БД?

18.01.2020, 16:08. Показов 1249. Ответов 27

Студворк — интернет-сервис помощи студентам
Нужен совет специалиста. Вот у меня есть такой запрос к БД

PHP
1
2
$query = "SELECT id, title FROM videos WHERE id > 0";
$result = mysqli_query($link, $query) or die(mysqli_error($link));
который занимает очень много времени, ибо количество id может измеряться тысячами, а то и десятками тысяч.
Подскажите, что можно сделать, чтобы данные получить быстрее? Может в несколько потоков заставить его работать или еще чего?

Беда в том, что сайт на хостинге и время выполнения скрипта ограничено.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2020, 16:08
Ответы с готовыми решениями:

Как увеличить производительность при анимации
Всем доброго времени суток. Возникла огромная проблема с производительностью при работе анимации(появление панельки описания и скрытие...

Возможно ли при помощи подбора комплектующих увеличить производительность компьютера?
Уже достаточно длительное время помогаю выбирать людям компьюторную и оргтехники, веду обслуживание и ремонт. Но не давно пришел в голову...

Как увеличить производительность
Докупал кингстон 2ГБ, тоже 1333МГц. Какую нужно докупить планку а может лучше две чтобы повысить мощьность производительности компьютера? ...

27
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
18.01.2020, 17:22
Студворк — интернет-сервис помощи студентам
небольшая правка, вместо
PHP
1
$deleteIds = $row['id'];
PHP
1
$deleteIds[] = $row['id'];
Добавлено через 1 минуту
Цитата Сообщение от skapunker Посмотреть сообщение
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in .....\clean_d_546242224.php on line 18
Я просто опустил ваш запрос
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query = "SELECT thumbnail, id FROM videos";
$result = mysqli_query($link, $query) or die(mysqli_error($link));
 
$deleteIds = [];
 
while ($row = mysqli_fetch_assoc($result));
    //проверяем наличие обложки
    $headers = get_headers($row['thumbnail']); 
    if(preg_match("/404/", $headers[0])) {
        $deleteIds[] = $row['id'];
    }   
}
 
if (!empty($deleteIds)) {
    $query = "DELETE FROM videos WHERE  id IN (" . implode(',', $deleteIds) . ")";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));
    if($result) echo 'Success deleted!<br>'; 
}
Добавлено через 4 минуты
skapunker, В любом случае данная операция будет долго выполняться. Так как вы делаете тысячи запросов на проверку 404 ошибки. Скрипт нужно запускать по крону, либо через консоль.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 17:25  [ТС]
sad67man, щас минуту покрутилось и выдало ошибки
Warning: mysqli_query(): MySQL server has gone away in G:\Server\domains\site\clean_d_546242224 .php on line 31

Warning: mysqli_query(): Error reading result set's header in G:\Server\domains\site\clean_d_546242224 .php on line 31
MySQL server has gone away

31 строка
PHP
1
$result = mysqli_query($link, $query) or die(mysqli_error($link));
Цитата Сообщение от sad67man Посмотреть сообщение
Скрипт нужно запускать по крону, либо через консоль.
И так планируется по крону через wget, но скорее всего на хостинге его выполнение тоже по таймауту будет остановлено.
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
18.01.2020, 17:31
Цитата Сообщение от skapunker Посмотреть сообщение
31 строка
Это в какой строке поконкретнее. а то по коду у вас таких несколько абсолютно одинаковых). Скорее всего ругается на слишком большие пакеты. Нужно делить по частям. через LIMIT и OFFSET
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 17:32  [ТС]
sad67man, вот весь скрипт

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
 
set_time_limit(0); // убираем лимит на время выполнения скрипта
 
include 'config.php';
 
 
$link = mysqli_connect($sql_db_host, $sql_db_user, $sql_db_pass, $sql_db_name);
mysqli_query($link, "SET NAMES 'utf8'");
 
// проверяем соединение
 
if($link == false) echo 'Data base connection error' . mysqli_connect_error();
else echo 'The connection is true!<br>'; 
 
$query = "SELECT thumbnail, id FROM videos WHERE id > 0";
$result = mysqli_query($link, $query) or die(mysqli_error($link));
 
$deleteIds = [];
 
while ($row = mysqli_fetch_assoc($result)) {
    //проверяем наличие обложки
    $headers = get_headers($row['thumbnail']); 
    if(preg_match("/404/", $headers[0])) {
        $deleteIds[] = $row['id'];
    }   
}
 
if (!empty($deleteIds)) {
    $query = "DELETE FROM videos WHERE  id IN (" . implode(',', $deleteIds) . ")";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));
    if($result) echo 'Success deleted!<br>'; 
}
 
echo 'end';
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
18.01.2020, 17:37
skapunker, Проверьте сколько нашлось записей, скорее всего из-за большого кол-ва.

PHP
1
2
3
4
5
6
7
if (!empty($deleteIds)) {
    var_dump(count($deleteIds)); die();
 
    $query = "DELETE FROM videos WHERE  id IN (" . implode(',', $deleteIds) . ")";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));
    if($result) echo 'Success deleted!<br>'; 
}
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 17:42  [ТС]
sad67man, щас выдало
The connection is true!
int(1)
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
18.01.2020, 18:11
skapunker, Значит из-за таймаута соединения к Mysql.

Добавлено через 7 минут
Я просто предполагаю, что это из-за того, что мы сначала делаем 1 запрос. Потом минуту обрабатываем, не делая никаких запросов. Mysql думает, что он уже не нужен и закрывается. Чтоб подтвердить теорию, попробуйте после выполнения первого запроса закрыть соединение, а перед запросом на удаление открыть его снова.
0
Невнимательный
 Аватар для ft4l
3142 / 1356 / 362
Регистрация: 08.02.2013
Сообщений: 7,948
Записей в блоге: 2
18.01.2020, 18:16
Цитата Сообщение от sad67man Посмотреть сообщение
попробуйте после выполнения первого запроса
Думаю поздно у ТС уже удалилась туева хуча записей и осталось надеяться что не удалилось ничего лишнего или на худой конец остался дамп DB
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2020, 18:16

Как увеличить производительность вычислений?
Проблема: Вычисления программы (функция нахождения расстояний между точками) задействуют лишь один поток в windows forms, и нагрузка на...

Как увеличить производительность программы?
Доброе время суток) Ранее я думал, что многопоточность программы увеличивает ее скорость, но ошибался.. (тоже, смотря что делать.. если...

Как бюджетно увеличить производительность?
Доброго времени суток. Представляю вашему вниманию свою сборку домашнего ПК. Материнская плата: ASRock N68C-GS FX ЦП: HexaCore AMD...

Как увеличить производительность проца?
какие способы существуют? виртуально, а не физически Добавлено через 2 минуты КАК РАЗОГНАТЬ? Добавлено через 5 минут я так...

Как увеличить производительность компьютера?
Как увеличить производительность компа? CPU - Intel Celeron 2.1GHz (разгоняю до 2.5) Видюха - ATI Radeon X1650 Series и ATI Radeon...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru