나는 ~ 1.500.000 기록 테이블이 있습니다 크기 name
에 item_id
와간단한 MySQL의 쿼리가 큰 테이블에 매우 느리게 실행 명령
CREATE TABLE `item_locale` (
`item_id` bigint(20) NOT NULL,
`language` int(11) NOT NULL,
`name` varchar(256) COLLATE utf8_czech_ci NOT NULL,
`text` text COLLATE utf8_czech_ci)
PRIMARY KEY (`item_id`,`language`),
KEY `name` (`name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
, language
1 차 키와 인덱스를 255
는 : 50 행이 필요했다하지만
select item_id, name from item_locale order by name limit 50;
셀렉트는 약 3 초 이벤트를합니다.
이러한 쿼리의 속도를 높이려면 어떻게해야합니까?
편집 : 여러분 중 일부는 INDEX를 추가 할 것을 제안했습니다. 나는 name
열이 나는 명령에 explain
을 runned 255
크기 색인되어, 위에서 언급 한 ...
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| 1 | SIMPLE | item_locale | ALL | NULL | NULL | NULL | NULL | 1558653 | Using filesort |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
이상한 것은 그것이 그 어떤 인덱스를 사용하지 않는 것입니다
MySQL이 쿼리를 어떻게 수행하는지 보려면'EXPLAIN'을 사용하십시오. –
쉬운 해결책은 item_id와 name에 덮어 쓰기 색인을 추가하는 것입니다. 'name'만으로 인덱스를 추가하는 것만으로도 MySQL이 인덱스 결합 *을 처리하는 방법에 따라 충분할 수 있습니다. * (read as : 나도 몰라요) * –
explain 명령의 결과를 추가했습니다. –