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
Форумы портала PHP.SU :: Версия для печати :: Решение проблемы с тяжелым запросом к БД
Форумы портала PHP.SU » PHP » Программирование на PHP » Решение проблемы с тяжелым запросом к БД

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

1. bt_corp - 05 Декабря, 2010 - 23:15:14 - перейти к сообщению
Долго я плавал в поисках решения проблемы нагрузки на сервер, которую влечет запрос в БД использующий 7 таблиц, в результате на мощном VDS 1Гб оперативной и 2.4ГГц процессора запрос генерируется 8 - 14 секундах и это при том, что в результат при определенном параметре " WHERE "попадает пока 600 записей. Пока так и не обнаружил нужный остров где бы можно было найти решение этой задачи. Я смотрю в сторону кэширования. Просмотрев массу документации и примеров я так и не понял как реализовать это в данном случае. И вообще является ли это решением данной проблемы? Я не знаю ... Однако Хотел бы услышать мнение от людей которые имеют соображения по данной проблеме! Подмигивание
2. Мелкий - 05 Декабря, 2010 - 23:22:08 - перейти к сообщению
0) индексы создали по полям объединений?
1) смотрите через explain, использует ли СУБД эти индексы
3. bt_corp - 06 Декабря, 2010 - 01:00:21 - перейти к сообщению
Проверил, индексы проставлены.

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

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.  
4. OrmaJever - 06 Декабря, 2010 - 02:21:42 - перейти к сообщению
запрос мягко говоря огого... А вы хотите взять этим запросом? Однако
5. Мелкий - 06 Декабря, 2010 - 09:40:10 - перейти к сообщению
bt_corp пишет:
WHERE 1 =1

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

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

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

bt_corp пишет:
LIKE 0,10

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

 

Powered by ExBB FM 1.0 RC1