blogentries
더 나은 성능을 위해 데이터베이스 를 색인하려고 하지만 문제를 발견했습니다.
구조는 다음과 같습니다.
CREATE TABLE IF NOT EXISTS `blogentries` (
`id_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL,
`entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL,
`date_id` int(11) NOT NULL,
PRIMARY KEY (`id_id`)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1
COLLATE=latin1_german2_ci
AUTO_INCREMENT=271;
다음과 같은 쿼리는 인덱스를 올바르게 사용합니다.
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + --------------- + ------- + ---------- ------- + --------- + --------- + ------ + ------ + ---------- ----- + | 아이디 | select_type | 테이블 | 타입 | possible_keys | 열쇠 | key_len | 심판 | 행 | 추가 | + ---- + ------------- + --------------- + ------- + ---------- ------- + --------- + --------- + ------ + ------ + ---------- ----- + | 1 | 단순 | 블로그 색인 | NULL | 기본 | 114 | NULL | 126 | 색인 사용 | + ---- + ------------- + --------------- + ------- + ---------- ------- + --------- + --------- + ------ + ------ + ---------- ----- +
나는를 추가 할 때, entry_id
에 SELECT
질의 그것은 filesort를 사용
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + --------------- + ------ + ----------- ------ + ------ + --------- + ------ + ------ + -------------- ---- + | 아이디 | select_type | 테이블 | 타입 | possible_keys | 열쇠 | key_len | 심판 | 행 | 추가 | + ---- + ------------- + --------------- + ------ + ----------- ------ + ------ + --------- + ------ + ------ + -------------- ---- + | 1 | 단순 | 블로그 모두 | NULL | NULL | NULL | NULL | 126 | filesort 사용하기 | + ---- + ------------- + --------------- + ------ + ----------- ------ + ------ + --------- + ------ + ------ + -------------- ---- +
왜 이런 일이 일어나고 어떻게 피할 수 있을지 궁금했습니다. 때문입니까 VarChar
, 다른 것으로 변경되어야합니까?
높은 값 으로 실행되면서 모든 쿼리에서 인덱스를 사용하도록 노력 Handler_read_rnd
하고 Handler_read_rnd_next
있습니다.
다른 정보가 필요하면 게시 할 수도 있습니다.
WHERE 1=1
두 번째 쿼리에 추가 하십시오.