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

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

18.01.2020, 16:08. Показов 1076. Ответов 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
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:12
Зачем выбирать тысячами? Используйте разделение на страницы (пагинацию).
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:14  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Зачем выбирать тысячами? Используйте разделение на страницы (пагинацию).
понятия пока не имею что это но сейчас попробую разобраться
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:16
Не имеете понятия про пагинацию?

В запрос можно добавить LIMIT максимум сколько или LIMIT начальная позиция, максимум сколько.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
18.01.2020, 16:16
А Вам нужны они все одновременно?
Подозреваю, что большая времени уходит на передачу огромного массива
Запрашивайте только нужное "окно", используя limit
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:17
Удалено.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:19  [ТС]
Но еще такой момент, скрипт работает и выполняет действия без участия человека, он получает эти данные а потом передает обработчику.

Если кратко, то смысл в том, чтобы проверить все записи на наличие title и в случае его отсутствия удалить эти записи.

Добавлено через 32 секунды
Цитата Сообщение от estic Посмотреть сообщение
В запрос можно добавить LIMIT максимум сколько или LIMIT начальная позиция, максимум сколько.
добавлю я этот лимит, а как потом дальше чекать?
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:22
Также понадобится отдельный запрос с COUNT(*), чтобы построить навигацию по страницам (нужно знать общее количество элементов/страниц).

Добавлено через 1 минуту
Цитата Сообщение от skapunker Посмотреть сообщение
Но еще такой момент, скрипт работает и выполняет действия без участия человека, он получает эти данные а потом передает обработчику.
Самое главное забыли сказать
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:22  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Также понадобится отдельный запрос с COUNT(*), чтобы построить навигацию по страницам
Так ведь она мне и не нужна)) надо попроще решение
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
18.01.2020, 16:28
skapunker,
Цитата Сообщение от skapunker Посмотреть сообщение
Если кратко, то смысл в том, чтобы проверить все записи на наличие title и в случае его отсутствия удалить эти записи.
Так выбирайте не все записи, а те у которых пустой title. А можно и сразу удалять.
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:28
Для фоновых задач нормальны большие объемы работы, но одним запросом, конечно, это лучше не делать. Просто делайте в цикле от 0 до $page_count-1.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:29  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Так выбирайте не все записи, а те у которых пустой title. А можно и сразу удалять.
интересно)) вот только как это сделать?

Пока что у меня работает так: получам все тайтлы записей и id а потом циклом проверяем их наличие.
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:32
Цитата Сообщение от skapunker Посмотреть сообщение
Так ведь она мне и не нужна)) надо попроще решение
Я это написал, еще не видя вновь открывшихся обстоятельств Для цикла тоже COUNT(*) может понадобиться
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
18.01.2020, 16:32
skapunker,

SQL
1
SELECT id FROM videos WHERE `title` = '' OR `title` IS NULL
Либо сразу удалять.
SQL
1
DELETE FROM videos WHERE `title` = '' OR `title` IS NULL
1
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
18.01.2020, 16:35
Цитата Сообщение от skapunker Посмотреть сообщение
Пока что у меня работает так: получам все тайтлы записей и id а потом циклом проверяем их наличие.
Можно удалять по условию, только тоже ограничение ставьте, например LIMIT 50.

Добавлено через 1 минуту
И поле title, наверное, лучше проиндексировать.

Зачем помещать в таблицу записи, которые потом удаляете, спрашивать не буду
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:47  [ТС]
всем спасибо! сделал так
MySQL
1
DELETE FROM videos WHERE `title` = '' OR `title` IS NULL
работает великолепно!

Но теперь есть еще одна задача и она посложнее. Смысл задачи почти такой же, нужно как то оптимизировать работу.
Вот у нас есть запрос к БД и обработчик.

Здесь столбик thumbnail содержит url картинок, которые нужно проверить на наличие и если они выдают 404 то тоже удалить. Собственно, такая конструкция тоже работает долго. Че можно упростить?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query = "SELECT thumbnail, id FROM videos WHERE id > 0";
$result = mysqli_query($link, $query) or die(mysqli_error($link));
 
for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
$count = count($data);
 
 for ($i = 0; $i < $count; $i++ ) { 
    
    //проверяем наличие обложки
    $headers = get_headers($data[$i]['thumbnail']); 
    if(preg_match("/404/", $headers[0])) {
        $query = "DELETE FROM videos WHERE id= " .$data[$i]['id'];
        $result = mysqli_query($link, $query) or die(mysqli_error($link));
        if($result) echo 'Success deleted!<br>';             
    }   
    
}
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
18.01.2020, 16:52
skapunker, Я так понимаю url картинок ведут на чужие сайты? Т.е. картинки не хранятся у вас на сервере?
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 16:55  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
skapunker, Я так понимаю url картинок ведут на чужие сайты? Т.е. картинки не хранятся у вас на сервере?
все верно, картинки с ютуба. Ссылки типа таких
HTML5
1
https://i.ytimg.com/vi/-E7FSxsN74Y/mqdefault.jpg
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
18.01.2020, 17:04
skapunker, Ну во-первых какие-то странные у вас циклы. Не совсем понятно, зачем вы в цикле вызываете еще один цикл. Вы хоть понимаете что происходит, вы достаете запись, кладете в массив, потом по массиву пробегаетесь. Достаете следующую запись, кладете в массив и еще раз по массиву пробегаетесь, дублируя запросы.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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>'; 
}
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
18.01.2020, 17:14  [ТС]
sad67man, пишет ошибку

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in .....\clean_d_546242224.php on line 18

строка 18 содержит

PHP
1
while ($row = mysqli_fetch_assoc($result)) ..................
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2020, 17:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru