다중 선택 이름 (테이블이 호출 할 때 '코드'), 상위 개체의 ID (parent_id) 및 다중에서 선택된 옵션 이름을 저장하는 InnoDB MYSQL 테이블이 있습니다.MySQL에서 DISTINCT 쿼리 속도 향상
CREATE TABLE IF NOT EXISTS `v2_CA_venue_option_name` (
`name_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`name_id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Venue Option Names' AUTO_INCREMENT=60 ;
나는 최적화하고 싶다고 : 선택 (name_id.error가) :
CREATE TABLE IF NOT EXISTS `v2_CA_venue_option_map` (
`map_id` int(11) NOT NULL auto_increment,
`code` varchar(30) NOT NULL,
`parent_id` int(11) NOT NULL,
`name_id` int(11) NOT NULL,
PRIMARY KEY (`map_id`),
UNIQUE KEY `3way_unique` (`code`,`parent_id`,`name_id`),
KEY `name_id` (`name_id`),
KEY `filter` (`code`,`name_id`),
KEY `parent_id` (`parent_id`),
KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=875156 ;
와 이름을 저장하는 간단한 표 (그 쿼리에 사용하기 때문에 나는이 보여 거라 생각) 다음 검색어 :
,128,는이 쿼리는 실행하는 데 약 600ms의 소요 궁금 해서요 :
- 나는이 별개의 쿼리 속도를 테이블에 인덱스를 배치 할 수 있다면.
- 더 나은 성능으로 어떻게 동일한 결과를 얻을 수 있습니까?
다음은 위 쿼리에 대한 설명입니다.
UPDATE, 내 두 번째 질문을 제거했습니다.
UPDATE 이것은 속도를 높이는 가장 좋은 방법은 출력을 별도의 테이블에 한 번 저장 한 다음 그 테이블을 호출하는 것입니다.이 테이블은 쿼리를 충분히 빠르게 수행 할 수 없으므로 내 요구와 색인이 DISTINCT 쿼리에 도움이되지 않는 것 같습니다.
질문이 여러 개인 경우, 사람들이 도움을받을 가능성이 높으므로 여러 질문을 만들어야합니다. – Igor
또한 조회에 대한 Explain 플랜을 붙여 넣기를 원할 수도 있습니다. MySQL의 최적화 도구가 무엇을하는지 보는 것이 도움이 될 것입니다. –
이 쿼리를 실행하는 데 걸리는 시간과 반환되는 행 수는 얼마나됩니까? 'v2_CA_venue_option_map에서 name_id를 선택하십시오. 여기서 code = "a_event_types"group by name_id' – Karolis