1
filesort를 피하려고하지만 내부 쿼리에서 파일을 제거하지 않으려 고합니다. 조건을 외부 쿼리로 이동하면 아무 것도 표시되지 않습니다.MySQL은 내부 쿼리에서 filesort를 피한다
Create table articles (
article_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
editor_id Int UNSIGNED NOT NULL,
published_date Datetime,
Primary Key (book_id)) ENGINE = InnoDB;
Create Index published_date_INX ON articles (published_date);
Create Index editor_id_INX ON articles (editor_id);
EXPLAIN SELECT article_id, article_date FROM articles AA INNER JOIN
(
SELECT article_id
FROM articles
WHERE editor_id=1
ORDER BY published_date DESC
LIMIT 100, 5
) ART USING (article_id);
+----+-------------+------------+--------+---------------+-----------+---------+----------------+--------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+-----------+---------+----------------+--------+----------------+
| 1 | | PRIMARY | <derived2> | ALL | NULL | NULL | NULL NULL | 5 | |
| 1 | | PRIMARY | AA | eq_ref | PRIMARY | PRIMARY | 4 ART.article_id | 1 | |
| 2 | | DERIVED | articles | ALL | editor_id | editor_id | 5 | 114311 | Using filesort |
+----+-------------+------------+--------+---------------+-----------+---------+----------------+--------+----------------+
3 rows in set (30.31 sec)
제안 사항이 쿼리에서 filesort를 제거하는 방법은 무엇입니까?
'edpub_INX' 인덱스는 B + TREE 인덱스 이후로 ** published ** date **에 ** ** ** ** ** ** 정렬하는 데 도움이되지 않을 것입니다. 순서는 중요하며 인덱스 키는 : editor_id', published_date'를 입력하십시오. 'order by' 절을 돕기 위해 쿼리 플래너에는'published_date '가 첫 번째 필드 인 인덱스가 필요하다고 생각합니다. –