인덱스 (또는 실제로 쿼리 자체)를 사용하여 MySQL 쿼리를 최적화하는 방법에 대한 도움이 필요하십니까?쿼리 최적화
테이블 구조 :
CREATE TABLE IF NOT EXISTS `match_current` (
`partnership_id` int(11) NOT NULL AUTO_INCREMENT,
`runs` int(5) NOT NULL DEFAULT '0',
`balls` int(5) NOT NULL DEFAULT '0',
`user1_id` bigint(11) NOT NULL,
`user1_firstname` char(20) NOT NULL,
`user1_lastname` char(20) NOT NULL,
`user1_runs` int(5) NOT NULL DEFAULT '0',
`user1_balls` int(5) NOT NULL DEFAULT '0',
`user1_strike` tinyint(1) NOT NULL DEFAULT '1',
`user1_out` tinyint(1) NOT NULL DEFAULT '0',
`user1_retired` tinyint(1) NOT NULL DEFAULT '0',
`user2_id` bigint(11) NOT NULL,
`user2_firstname` char(20) NOT NULL,
`user2_lastname` char(20) NOT NULL,
`user2_runs` int(5) NOT NULL DEFAULT '0',
`user2_balls` int(5) NOT NULL DEFAULT '0',
`user2_strike` tinyint(1) NOT NULL DEFAULT '0',
`user2_out` tinyint(1) NOT NULL DEFAULT '0',
`user2_retired` tinyint(1) NOT NULL DEFAULT '0',
`last_over` char(15) NOT NULL,
`ball_by_ball` varchar(1000) NOT NULL,
`facebook` tinyint(1) NOT NULL DEFAULT '0',
`friends` tinyint(1) NOT NULL DEFAULT '0',
`nudge` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`started` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` tinyint(1) NOT NULL DEFAULT '1',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`partnership_id`),
UNIQUE KEY `user1_id_2` (`user1_id`,`user2_id`,`facebook`),
KEY `user2_id` (`user2_id`),
KEY `user1_id` (`user1_id`),
KEY `facebook` (`facebook`),
KEY `status` (`status`),
KEY `friends` (`friends`),
KEY `timestamp` (`timestamp`),
KEY `user1_id_3` (`user1_id`,`user1_strike`),
KEY `user2_id_2` (`user2_id`,`user2_strike`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=36139 ;
예제 쿼리 :
SELECT *
FROM match
WHERE status = 1
AND (
(user1_id=1234 AND user1_strike=1) OR
(user2_id=4321 AND user2_strike=1)
)
ORDER BY timestamp ASC
쿼리 분명히 작동하고 너무 나쁜 일을하지 않은 그러나 우리는 정말 최근에 트래픽을 증가했습니다 지금은 그것이 시작하고있다 볼 수 있습니다 투쟁하기.
건배!
최적화를 위해 사람들은 테이블 구조/인덱스가 무엇인지 알아야합니다. 당신의 질문에'SHOW CREATE TABLE match'의 출력을 추가하는 것을 고려해보십시오. – Andris
어떤 열을 인덱스로 설정 하시겠습니까? 인덱스는 숫자 또는 날짜 시간 열이 아닌 문자열 mathcing 및 검색을위한 것입니다 ... – shadyyx
보유하고있는 인덱스를 표시해야합니다. – paulgrav