semender
06.05.2011, 09:49
К сожалению tt_news генерирует страницы слишком долго при большом количестве новостей из-за большого числа запросов к БД, из-за проверки неиспользуемых условий....Довольно трудно разобраться во всех этих дебрях одному...Как вы с этим боритесь,свои подходы, методы борьбы, оригинальные идеи?
dmartynenko
08.05.2011, 13:32
Универсальность tt_news и следование TYPO3-way практике разработки ведут к неэффективности SQL запросов.
У меня на сервере лог медленных запросов на 95% состоит из запросов tt_news. Пример двух последовательных запросов. Они по определению не могут быстрыми. И результат на лицо - второй запрос выполняется 0.5 секунды выбирая при этом всего 7 записей. 
Железо очень быстрое, сайт довольно нагруженный - днем, по статистике, mysql обрабатывает около 1000 запросов заждую секунду.
В tt_news чуть больше 10 тыс. записей новостей и 30 записей категорий.
***** 17-03-2011 18:05:11
***** TIME = 58.828 ms
SELECT COUNT(DISTINCT tt_news.uid)
	FROM tt_news LEFT OUTER JOIN tt_news_cat_mm ON tt_news.uid = tt_news_cat_mm.uid_local
	WHERE
		1=1  
		AND (tt_news_cat_mm.uid_foreign IN (1,32,21,25,7,11,55)) 
		AND tt_news.uid NOT IN (9146) 
		AND tt_news.sys_language_uid IN (0,-1) 
		AND tt_news.pid > 0  
		AND tt_news.uid NOT IN (9146) 
		AND tt_news.pid IN (85,86,87,88,137,369,520) 
		AND tt_news.deleted=0 
		AND tt_news.t3ver_state!=1 
		AND tt_news.hidden=0 
		AND (tt_news.starttime<=1300377910) 
		AND (tt_news.endtime=0 
			OR tt_news.endtime>1300377910) 
		AND (tt_news.fe_group='' 
			OR tt_news.fe_group IS NULL 
			OR tt_news.fe_group='0' 
			OR (tt_news.fe_group LIKE '%,0,%' 
			OR tt_news.fe_group LIKE '0,%' 
			OR tt_news.fe_group LIKE '%,0' 
			OR tt_news.fe_group='0') 
			OR (tt_news.fe_group LIKE '%,-2,%' 
			OR tt_news.fe_group LIKE '-2,%' 
			OR tt_news.fe_group LIKE '%,-2' 
			OR tt_news.fe_group='-2') 
			OR (tt_news.fe_group LIKE '%,3,%' 
			OR tt_news.fe_group LIKE '3,%' 
			OR tt_news.fe_group LIKE '%,3' 
			OR tt_news.fe_group='3') 
			OR (tt_news.fe_group LIKE '%,6,%' 
			OR tt_news.fe_group LIKE '6,%' 
			OR tt_news.fe_group LIKE '%,6' 
			OR tt_news.fe_group='6') 
			OR (tt_news.fe_group LIKE '%,7,%' 
			OR tt_news.fe_group LIKE '7,%' 
			OR tt_news.fe_group LIKE '%,7' 
			OR tt_news.fe_group='7') 
			OR (tt_news.fe_group LIKE '%,9,%' 
			OR tt_news.fe_group LIKE '9,%' 
			OR tt_news.fe_group LIKE '%,9' 
			OR tt_news.fe_group='9'))
****** 17-03-2011 18:05:11
****** TIME = 500.765ms
SELECT DISTINCT tt_news.uid, tt_news.*
	FROM tt_news LEFT OUTER JOIN tt_news_cat_mm ON tt_news.uid = tt_news_cat_mm.uid_local
	WHERE
		1=1  
		AND (tt_news_cat_mm.uid_foreign IN (1,32,21,25,7,11,55)) 
		AND tt_news.uid NOT IN (9146) 
		AND tt_news.sys_language_uid IN (0,-1) 
		AND tt_news.pid > 0  
		AND tt_news.uid NOT IN (9146) 
		AND tt_news.pid IN (85,86,87,88,137,369,520) 
		AND tt_news.deleted=0 
		AND tt_news.t3ver_state!=1 
		AND tt_news.hidden=0 
		AND (tt_news.starttime<=1300377910) 
		AND (tt_news.endtime=0 
			OR tt_news.endtime>1300377910) 
		AND (tt_news.fe_group='' 
			OR tt_news.fe_group IS NULL 
			OR tt_news.fe_group='0' 
			OR (tt_news.fe_group LIKE '%,0,%' 
			OR tt_news.fe_group LIKE '0,%' 
			OR tt_news.fe_group LIKE '%,0' 
			OR tt_news.fe_group='0') 
			OR (tt_news.fe_group LIKE '%,-2,%' 
			OR tt_news.fe_group LIKE '-2,%' 
			OR tt_news.fe_group LIKE '%,-2' 
			OR tt_news.fe_group='-2') 
			OR (tt_news.fe_group LIKE '%,3,%' 
			OR tt_news.fe_group LIKE '3,%' 
			OR tt_news.fe_group LIKE '%,3' 
			OR tt_news.fe_group='3') 
			OR (tt_news.fe_group LIKE '%,6,%' 
			OR tt_news.fe_group LIKE '6,%' 
			OR tt_news.fe_group LIKE '%,6' 
			OR tt_news.fe_group='6') 
			OR (tt_news.fe_group LIKE '%,7,%' 
			OR tt_news.fe_group LIKE '7,%' 
			OR tt_news.fe_group LIKE '%,7' 
			OR tt_news.fe_group='7') 
			OR (tt_news.fe_group LIKE '%,9,%' 
			OR tt_news.fe_group LIKE '9,%' 
			OR tt_news.fe_group LIKE '%,9' 
			OR tt_news.fe_group='9'))
	ORDER BY datetime DESC
	LIMIT 7
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot