Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация запросов, mysql+php 
:(
    Опции темы
quiz
Дата 20.11.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Здравствуйте.
Я новичок в php, пишу как могу smile В результате мои скрипты изобилуют десятками-сотнями запросов к базе, сильно ее загружая.
Запросы бывают разные - select, update, delete.
В основном select такого типа:
Код

$log = mysql_query("SELECT * FROM tb1 WHERE (bid = '$bid')");
$log = mysql_fetch_array($log);


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

Дальше как ускорять - не знаю smile
Буду рад любым советам!

Спасибо
PM MAIL   Вверх
Piphon
Дата 21.11.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 30.3.2004
Где: Екатеринбург

Репутация: нет
Всего: 2



Пиши четко что тебе надо. Например:
Код

SELECT id, title, parent, descript FROM data WHERE id='$id'

Не используй подзапросов

Код

SELECT id, title, parent, descript FROM data WHERE id=(SELECT ...)

Пример не четкий, я подзапросами стараюсь не пользоваться.

Ну и индексы конечно.
--------------------
Non Progredi Est Regredi...
PM MAIL ICQ   Вверх
SelenIT
Дата 21.11.2006, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



quiz, в первую очередь - тщательно продумывайте алгоритм. Никогда не делайте запросов из цикла/рекурсии, лучше соберите результаты одного запроса в массив и работайте дальше с ним.

Кроме того, смелее используйте функции самой базы. Например, чтобы подсчитать число записей, отвечающих условию, используйте функцию COUNT():
Код

$r = mysql_query("SELECT COUNT(*) FROM ... WHERE ...");
$f = mysql_fetch_row($r);
$count = $f[0];
вместо фактической выборки этих строк с последующим подсчетом через mysql_num_rows (к сожалению, такой вариант до сих пор встречается в некотрых "учебных" статьях):
Код

$r = mysql_query("SELECT * FROM ... WHERE ...");
$count = mysql_num_rows($r); // это нагружает базу выборкой фактически ненужной информации



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
quiz
Дата 24.11.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



все это я делаю... все-равно 2х процессорный ксеон с 8 гб памяти загружает mysql полностью smile
PM MAIL   Вверх
BossIT
Дата 24.11.2006, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



quiz - что то не вериться про загруженый ксеон.

Рекурсии используешь?

Попробый сделать профилирование кода, и узнаешь какие участи у тебя более ресурсоемкие.
PM MAIL   Вверх
quiz
Дата 28.11.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



не знаю что такое рекурсии даже smile И Профилирование тоже не знаю
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.