이러한 종류의 쿼리는 인덱스를 사용하여 눈부신 속도를 내기가 어렵습니다. age_min <= %age% AND age_max >= %age%
필터링은 쿼리 플래너 나 프로그래머가 깔끔한 작은 인덱스 범위 스캔으로 리팩토링 할 수 없습니다.
따라서 커버 리지 인덱스를 만들어 최상의 결과를 얻으십시오.
sex = %sex%
에 등호 필터가있어 색인에서 색인을 가져와야합니다.
age_min
및 age_max
에 하프 스캔 범위 필터가 있습니다. 이을 알고 있으면 그 중 하나가 다른 것보다 선택 적이라는 것을 알고 있으면 인덱스의 다음 열이되도록 선택하십시오. 그렇지 않으면 두 가지 중 하나를 선택하십시오.
그런 다음 나머지 테이블 열을 인덱스에 포함 시키십시오. 그래서 당신은 얻을 것이다
(sex, age_min, age_max, id, url)
색인에. 쿼리 플래너는이 인덱스의 일부만 스캔 한 다음 인덱스에서 쿼리를 만족시킬 수 있습니다. 색인을 다루는 을 조회하면이 기술에 대해 자세히 알 수 있습니다.
참고. 필터에 sex = %sex%
절을 포함하지 않으면이 색인은 해당 쿼리를 만족시키는 데 쓸모가 없습니다.
참고. MySQL은 단일 WHERE
절을 만족시키기 위해 하나 이상의 인덱스를 거의 사용하지 않습니다. 따라서 많은 컬럼에 단일 컬럼 인덱스를 두는 것은 결코 좋은 생각이 아닙니다.
참고. 테이블에 몇 백 개 미만의 행이 포함되어 있으면 색인을 생성해도 상처를받을 수는 없지만 많은 도움이되지는 않습니다.
나는 그것이'id'이어야한다고 생각합니다. –
@HamzaZafeer 그냥'id'? 나는'url'을 제외한 모든 필드에 인덱스를 추가 할 생각 이었지만 MySQL이 어떻게 관리 할 것인지 모르겠습니다. 아마도 연령대에 대해서도해야 할 일이있을 것입니다. –
IMO DBA.stackexchange.com에 배치하는 것이 더 좋을 수 있습니다. 프로그래밍 고려 사항이 아니라 설계 고려 사항에 관한 것입니다. –