Консультация № 186809
13.11.2012, 22:30
133.81 руб.
0 0 0
Здравствуйте! У меня возникли сложности с таким вопросом:

Запросы на сайте выполняются очень долго. Хочу попробовать создать дополнительные индексы для таблиц участвующих в запросе, но вот как определить для каких столбцов именно нужно их создать не могу разобраться, т.к. в mysql не силен и мало что в этом понимаю.

Примечание: работаем в битриксе.

"Тормозной" запрос:
Код:

SELECT BE.ID as ID,BE.NAME as NAME,BE.CODE as CODE,DATE_FORMAT(BE.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE,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,BE.CREATED_BY as CREATED_BY,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.DETAIL_PICTURE as DETAIL_PICTURE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE, FPS0.*, FPS0.PROPERTY_70 as PROPERTY_70_VALUE, FPS0.DESCRIPTION_70 as PROPERTY_70_DESCRIPTION, concat(BE.ID , ':' , 70) as PROPERTY_70_VALUE_ID,L.DIR as LANG_DIR,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_s15 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 = '15')))) AND ((((B.ACTIVE='Y')))) ) BB ON BB.ID = BE.IBLOCK_ID
INNER JOIN ( SELECT DISTINCT BSE.IBLOCK_ELEMENT_ID
FROM
b_iblock_section_element BSE
INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID
WHERE
((BS.ID IN (676))) ) BES ON BES.IBLOCK_ELEMENT_ID = BE.ID
WHERE
1=1 AND ( ((((BE.IBLOCK_ID = '15')))) AND ((((B.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.ACTIVE='Y')))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
ORDER BY
BE.NAME asc ,BE.ID desc
LIMIT 0, 100


Результат EXPLAIN данного запроса:
Код:

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system 1 Using temporary; Using filesort
1 PRIMARY B const PRIMARY PRIMARY 4 const 1
1 PRIMARY L const PRIMARY PRIMARY 2 const 1
1 PRIMARY <derived3> ALL 15735
1 PRIMARY FPS0 eq_ref PRIMARY PRIMARY 4 BES.IBLOCK_ELEMENT_ID 1
1 PRIMARY BE eq_ref PRIMARY,ix_iblock_element_1,ix_iblock_element_4,ix_iblock_element_3,ix_iblock_element_code PRIMARY 4 BES.IBLOCK_ELEMENT_ID 1 Using where
3 DERIVED BS const PRIMARY PRIMARY 4 1 Using index
3 DERIVED BSE ref ux_iblock_section_element ux_iblock_section_element 4 16889 Using where; Using index
2 DERIVED B const PRIMARY PRIMARY 4 1
2 DERIVED BS const PRIMARY PRIMARY 6 1 Using index


Прошу помочь в данном вопросе.

Если нужна дополнительная информация, сообщите какая.

Обсуждение

Форма ответа