@kyja

Какие индексы надо добавить к запросу?

Подскажите какие индексы надо добавить чтобы избавится от
Using filesort

Сам запрос

EXPLAIN EXTENDED 
SELECT 
	SQL_NO_CACHE DISTINCT BE.ID as ID 
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_7_index FC ON FC.ELEMENT_ID = BE.ID 
	LEFT JOIN b_catalog_product as PRD ON (PRD.ID = BE.ID) 
WHERE 
	1 = 1 
	AND (
		(
			FC.SECTION_ID = 2 
			AND FC.FACET_ID = 1 
			AND FC.VALUE_NUM = 0 
			AND FC.VALUE IN (0)
		) 
		AND (BE.PREVIEW_PICTURE IS NOT NULL) 
		AND (
			EXISTS (
				SELECT 
					IBLOCK_ID 
				FROM 
					b_iblock_site 
				WHERE 
					IBLOCK_ID = B.ID 
					AND (SITE_ID = 's1')
			)
		) 
		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.IBLOCK_ID = '7')
	) 
	AND (
		BE.WF_STATUS_ID = 1 
		AND BE.WF_PARENT_ELEMENT_ID IS NULL
	) 
	AND (
		B.ID IN (
			SELECT 
				IBLOCK_ID 
			FROM 
				b_iblock_group IBG 
			WHERE 
				IBG.GROUP_ID IN (2) 
				AND IBG.PERMISSION >= 'R' 
				AND (
					IBG.PERMISSION = 'X' 
					OR B.ACTIVE = 'Y'
				)
		) 
		OR (
			B.RIGHTS_MODE = 'E' 
			AND EXISTS (
				SELECT 
					ER.ELEMENT_ID 
				FROM 
					b_iblock_element_right ER 
					INNER JOIN b_iblock_right IBR ON IBR.ID = ER.RIGHT_ID 
					INNER JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE 
					AND UA.USER_ID = 0 
				WHERE 
					ER.ELEMENT_ID = BE.ID 
					AND IBR.OP_EREAD = 'Y'
			)
		)
	) 
ORDER BY 
	BE.ID DESC 
LIMIT 
	3


EXPLAIN

5ee5008a5409f400597300.png
Extra таблицы BE
5ee500fa637a7343029025.png
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
ни один индекс не поможет. надо переформулировать запрос
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы