2013-04-22 4 views
0

phpMyAdmin에 따라 다음 표를 최적화하려고합니다. 표 스캔에 관한 몇 가지 통계가 높고 색인이 없거나 사용되지 않습니다. (핸들러 읽기 RND 다음 5.7 M)MySQL에서 색인을 생성 할 열

1.

$query = " 
    SELECT * FROM apps_discrep 
    WHERE discrep_station = '$station' 
    AND discrep_date = '$date' 
    ORDER BY discrep_timestart"; 

2.

$query = " 
    SELECT * FROM apps_discrep 
    WHERE discrep_date BETWEEN '$keyword' AND '$keyword3' 
    AND (discrep_station like '$keyword2%') ORDER BY discrep_date"; 

그것이 인덱스 discrep_station, discrep_date 및 discrep_timestart에 올바른겠습니까? 현재 자동 증가 ID에는 기본 고유 색인 만 존재합니다.

- 테이블 구조

즉 별도의 지표로 가장 왼쪽에있는 튜플을 사용할 수 있기 때문에이 같은 BTREE 인덱스 두 쿼리를 얻을 수 있습니다처럼 내게 보이는
`index` int(11) NOT NULL AUTO_INCREMENT, 
discrep_station varchar(5) NOT NULL, 
discrep_timestart time NOT NULL, 
discrep_timestop time NOT NULL, 
discrep_date date NOT NULL, 
discrep_datetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
discrep_show varchar(31) NOT NULL, 
discrep_text text NOT NULL, 
discrep_by varchar(11) NOT NULL, 
discrep_opr varchar(11) NOT NULL, 
email_traffic varchar(3) NOT NULL, 
email_techs varchar(3) NOT NULL, 
email_promos varchar(3) NOT NULL, 
email_spots varchar(3) NOT NULL, 
eas_row varchar(11) NOT NULL, 
PRIMARY KEY (`index`) 
ENGINE=MyISAM DEFAULT CHARSET=utf8; 

답변

0

.

this MySQL doc page을 참조하십시오.

ALTER TABLE xxx ADD KEY `key1` (`discrep_station`, `discrep_date`, `discrep_timestart`) USING BTREE; 

첫 번째 쿼리는 인덱스의 3 개 필드를 모두 사용합니다. 두 번째 쿼리는 인덱스의 처음 두 필드 만 사용합니다.

관련 문제