@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
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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