예를 들어 지난 달 제출 한 기사 중 가장 많이 본 기사를 얻으려면 다음 쿼리를 사용합니다.쿼리로 MySQL 순서 최적화하기
explain
SELECT *
FROM article
WHERE date > 1315391769
ORDER BY views DESC
LIMIT 10
어떻게이 쿼리에 적합한 인덱스를 선택합니까? 또는 많은 행이나 파일 정렬을 스캔하지 않으려면 어떻게 다시 써야합니까?
CREATE TABLE `article` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(50) NOT NULL,
`body` text NOT NULL,
`date` int(32) NOT NULL,
`views` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `date` (`date`),
KEY `views` (`views`),
KEY `date_2` (`date`,`views`),
KEY `views_2` (`views`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=200003 ;
--
-- Dumping data for table `article`
--
INSERT INTO `article` VALUES (1, 'title test113', 'test body118', 1317912183, 5017);
INSERT INTO `article` VALUES (2, 'title test193', 'test body193', 1313441124, 5943);
INSERT INTO `article` VALUES (3, 'title test112', 'test body116', 1312773586, 653);
INSERT INTO `article` VALUES (4, 'title test378', 'test body374', 1316786646, 4589);
INSERT INTO `article` VALUES (5, 'title test335', 'test body3310', 1319173694, 6224);
주의 사항 :
이
내가 노력 현재 인덱스 테이블 방식이다 나는 대신 유닉스 타임 스탬프의 MySQL의 날짜를 시도했지만 나는 같은 결과를 얻었다.이
은 EXPLAIN의 출력 :id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE article range date,date_2 date 4 NULL 107245 Using where; Using filesort
내가 샘플로 5 행을 게시 @. –
int (32)는 무엇입니까? 좀 더 큰 int에 서명 했나요? 그 문제에 관해서, int (11)는 무엇입니까 ?? http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html –
이것은 11이 아니야 32입니다. 이미 MySQL 시간 및 MySQL datetime으로 변경했으며 동일한 결과를 얻었습니다. –