Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Решение проблемы с тяжелым запросом к БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ваши соображения.
bt_corp
Отправлено: 05 Декабря, 2010 - 23:15:14
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Долго я плавал в поисках решения проблемы нагрузки на сервер, которую влечет запрос в БД использующий 7 таблиц, в результате на мощном VDS 1Гб оперативной и 2.4ГГц процессора запрос генерируется 8 - 14 секундах и это при том, что в результат при определенном параметре " WHERE "попадает пока 600 записей. Пока так и не обнаружил нужный остров где бы можно было найти решение этой задачи. Я смотрю в сторону кэширования. Просмотрев массу документации и примеров я так и не понял как реализовать это в данном случае. И вообще является ли это решением данной проблемы? Я не знаю ... Однако Хотел бы услышать мнение от людей которые имеют соображения по данной проблеме! Подмигивание


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
Мелкий Супермодератор
Отправлено: 05 Декабря, 2010 - 23:22:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




0) индексы создали по полям объединений?
1) смотрите через explain, использует ли СУБД эти индексы


-----
PostgreSQL DBA
 
 Top
bt_corp
Отправлено: 06 Декабря, 2010 - 01:00:21
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Проверил, индексы проставлены.

Код запроса, не знаю что можно сделать. Огорчение

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT DISTINCT summary.info_hash AS hash, summary.seeds, summary.leechers, summary.finished AS finished, summary.dlbytes AS dwned, namemap.id, namemap.filename, namemap.file_view, namemap.url, namemap.info, namemap.anonymous, summary.speed, UNIX_TIMESTAMP( namemap.DATA ) AS added, namemap.size, namemap.external, namemap.uploader AS upname, users.username AS uploader, prefixcolor, suffixcolor
  3. FROM category_namemap, summary
  4. LEFT JOIN namemap ON summary.info_hash = namemap.info_hash
  5. LEFT JOIN users ON users.id = namemap.uploader
  6. LEFT JOIN users_level ON users.id_level = users_level.id
  7. WHERE 1 =1
  8. AND category_namemap.torrent_hash = summary.info_hash
  9. AND category_namemap.category_id
  10. IN ( 66 )
  11. AND namemap.filename LIKE '%%'
  12. AND namemap.info_hash = summary.info_hash
  13. ORDER BY id DESC LIKE 0,10
  14.  


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
OrmaJever Модератор
Отправлено: 06 Декабря, 2010 - 02:21:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




запрос мягко говоря огого... А вы хотите взять этим запросом? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Декабря, 2010 - 09:40:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




bt_corp пишет:
WHERE 1 =1

?! Для чего пустое условие? Пусть бд развлекается?

bt_corp пишет:
AND namemap.filename LIKE '%%'

аналогично, но куда более круто. Если хотите найти непустые строки, то так и проверяйте !=''

bt_corp пишет:
LIKE 0,10

А это вы вообще откуда нашли такое? СУБД ещё не в ужасе, нормально подобное парсит?
Limit, видимо, имелся в виду.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB