Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Советы по оптимизации работы tt_news. (http://forum.typo3.ru/showthread.php?t=9450)

semender 06.05.2011 09:49

Советы по оптимизации работы tt_news.
 
Вложений: 1
К сожалению 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



Часовой пояс GMT +4, время: 16:26.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot