2013-03-01 2 views
0

아래에 select 쿼리가 있습니다. 버추 마트 테이블의 특정 특성과 일치하는 모든 제품을 선택합니다. 속성 테이블은 다소 큽니다 (거의 6000 행). 아래의 쿼리를 최적화하는 방법이 있습니까? 아니면 도움이 될만한 다른 프로세스가 있습니까? 이미 하나 또는 두 개의 테이블에 인덱스를 추가하려고했습니다. 어떤 도움을 크게 감상 할 수버추 마트 속성 쿼리의 최적화

 
id select_type  table      type possible_keys            key    key_len  ref  rows Extras 
1 SIMPLE   jos_vm_product_attribute range idx_product_attribute_name,attribute_value,attribute_name attribute_value 765   NULL 333  Using where; Using temporary; Using filesort 
1 SIMPLE   jos_vm_product    eq_ref PRIMARY              PRIMARY   4   shoemark_com_shop.jos_vm_product_attribute.product_id 

:

SELECT DISTINCT `jos_vm_product`.`product_id`, 
    `jos_vm_product_attribute`.`attribute_name`, 
    `jos_vm_product_attribute`.`attribute_value`, 
    `jos_vm_product_attribute`.`product_id` 
FROM (`jos_vm_product`) 
    RIGHT JOIN `jos_vm_product_attribute` 
     ON `jos_vm_product`.`product_id` = `jos_vm_product_attribute`.`product_id` 
WHERE ((`jos_vm_product_attribute`.`attribute_name` = 'Size') 
    AND ((`jos_vm_product_attribute`.`attribute_value` = '6.5') 
     OR (`jos_vm_product_attribute`.`attribute_value` = '10')))  
GROUP BY `jos_vm_product`.`product_sku` 
ORDER BY CONVERT(`jos_vm_product_attribute`.`attribute_value`, SIGNED INTEGER) 
LIMIT 0, 24 

다음은 EXPLAIN 테이블의 결과입니다. 감사.

답변

0

jos_vm_product_attribute.attribute_name 색인을 jos_vm_product_attribute.attribute_namejos_vm_product_attribute.attribute_value의 복합 색인으로 바꾸면이 쿼리에 도움이됩니다. 현재 jos_vm_product_attribute.attribute_value에 대해 WHERE 조건의 색인 만 사용하고 있지만이 새로운 색인은 WHERE 조건의 두 부분에서 모두 사용할 수 있습니다.

+0

안녕 G-Nugget, 답장을 보내 주셔서 감사합니다. 귀하가 제안한 것을 시도했지만 다음 오류가 발생했습니다 : # 1071 - 지정된 키가 너무 깁니다. 최대 키 길이는 1000 바이트입니다. –

+0

편집 : 사실,이 두 열의 문자 길이를 줄인 다음 SQL을 다시 실행하여 SQL 명령을 사용하여 합성 색인을 추가했습니다. 오류가 발생하지 않았습니다. 속도에 차이가 있는지 확인하겠습니다. 감사! –

+0

@ TarunDhanwani 열의 데이터 형식 및 문자 집합은 무엇입니까? 가능한 경우 열의 색인을 완전히 만들어야합니다. utf-8 데이터 정렬을 사용하는 경우 인덱스의 필드 길이를 효과적으로 3 배로 늘리면 1000 바이트 제한에 더 빨리 도달하게됩니다. –

관련 문제