leha2002828
@leha2002828
Программирование php/html

Долгий вывод информации при запросе к mysql?

Код:
$datesdb = array("users", "users2", "users3", ...);
foreach ($datesdb as $datesdb2) {
$result = mysql_query("select * from ".$datesdb2);
while ($row = mysql_fetch_array($result)) {
if(isset($row['user_id'])){
		if($row['user_id'] == $id){
	echo "Name:".$row['name'];
    }
 }
if(isset($row['users_id'])){
		if($row['users_id'] == $id){
	echo "Name:".$row['name'];
    }
 } 
}
}

У меня большое кол-во баз, и при таком запросе очень сильно тормозит сайт.
Пробовал менять тип базы MyISAM и InnoDB изменений нет...
Может стоит адаптировать код? Помогите пожалуйста)
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Особо никак выборку не ускоришь, тк все упирается в чтение данных с диска.

Не уверен, но думаю надо создать индексы и фильтрацию перенести в MySQL, например, индекс по полю "user_id" и запрос вида
SELECT * FROM tbl WHERE user_id=$id

Если такой вариант не подходит и надо ускорить именно MySQL, то при наличии достаточного кол-ва оперативки, можно попробовать создавать MEMORY таблицы, загружать данные туда, а после по ним делать выборки, чтобы увеличить I/O rate

Другое решение, разумеется, если оно подходит к случаю, это кеширование полученных результатов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@procode
Разработчик
Во первых, речь идет не о базах а о таблицах.

Во-вторых стоит оптимизировать структуру БД - так не делают чтобы в цикле перебирать таблицы с однотипными данными.

3. Если много записей - стоит посмотреть есть ли индексы в таблицах и какие.

4. Какое железо на сервере и сколько записей в таблицах и сколько всего таблиц? )
Ответ написан
Комментировать
R0dger
@R0dger
Laravel/Yii/2 AngularJs PHP RESTful API
Если не нужно ждать результата выполнения и стоит php-fpm можно отдать консоль по fastcgi_finish_request()

Надо понимать, что Вы хотите добиться в конечном результате!
Ответ написан
Ваш ответ на вопрос

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

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