Количество записей в инфоблоке > 20к, при включении отладки на сайте показывает что нагрузку дает запрос
Код
SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.NAME as NAME,IF(EXTRACT(HOUR_SECOND
FROM
BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as ACTIVE_FROM,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE, FPS0.*,L.DIR as LANG_DIR,BE.SORT as SORT,BE.CODE as CODE,BE.XML_ID as EXTERNAL_ID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.XML_ID as IBLOCK_EXTERNAL_ID,B.LID as LID
FROM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
INNER JOIN b_iblock_element_prop_s7 FPS0 ON FPS0.IBLOCK_ELEMENT_ID = BE.ID
INNER JOIN ( SELECT DISTINCT B.ID
FROM
b_iblock B
INNER JOIN b_iblock_site BS ON BS.IBLOCK_ID = B.ID
WHERE
((((BS.SITE_ID='s1')))) AND ((((B.ID = '7')))) ) BB ON BB.ID = BE.IBLOCK_ID
WHERE
1=1 AND ( ((((BE.IBLOCK_ID = '7')))) AND ((((BE.ACTIVE='Y')))) AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
ORDER BY
BE.ACTIVE_FROM desc ,BE.SORT asc ,BE.ID desc
LIMIT 2
Время выполнения 35c. Свойства инфоблока находятся в отдельной таблице. Версия битрикса 10.0.1. Сервер выделенный.
Если включить кеширование то всё ок, работает быстро но большое время первой генерации что неподходит.
Думаю есть ошибка настройки MySQL. Этот же запрос я выполнил на 100k элементов - получил у себя 0.5 секунды. Посмотрите /bitrix/admin/perfmon_db_server.php?lang=ru
Dmitry Ban пишет: А у этих элементов было заполнено поле DETAIL_TEXT?
Да на информационных сайтах DETAIL_TEXT оказывает значительное влияние на скорость выборки стандартного news.list, так как приходится вытаскивать значительный объем информации.
Следующим шагом после ограничение выборки может стать создание своего компонента на основе стандартного с отключением выборки ненужных полей.
Итого, CHECK_DATES - не нужна, убрал. ничего не изменилось. На основании компонента bitrix:news.list сделал кастомный, закоментировав выбор полей "DETAIL_*"