2011-04-19 7 views
1

을 최적화하려면 어떻게 쿼리에 의해 위해를 제거하거나 쿼리

select field from table order by field asc limit 4000, 30; 

테이블 만 개 행이 큰 지연을 선택 같은 간단한에 의한 주문 가지고 가지고있다. 필드에 색인이 있습니다. 'order by'을 제거하고 한도를 높이고 select를 통해 동일한 결과를 얻는 방법?

제 제안은 행 순서를 변경 한 다음 간단하게 select field from table으로 변경하는 것입니다. 더 좋은 아이디어를 제안 해 주시겠습니까?

+0

인덱스 시스템을 사용 하시겠습니까? – Version1

+0

다른 필드로 주문하십니까? 아니면 매번 같은 분야로 주문하고 싶습니까? – Marvo

+0

'int' 컬럼'order'를 추가하고 그것을 정렬 할 수 있습니까? – alex

답변

0

필드의 데이터 형식은 순서가 얼마나 빨라지는지에 영향을줍니다. 정수 열은 일반적으로 가장 빠르며 텍스트 열은 가장 느립니다. 정렬하는 열의 데이터 유형이 텍스트 인 경우 대신 주문을 위해 숫자 열을 사용하는 것이 좋습니다.

당신이 주문하는 컬럼을 인덱싱하면 성능에 도움이되지만 MySQL은이를 무시하고 전체 테이블 스캔을 수행 할 수 있습니다. FORCE INDEX는 정렬 속도를 높이는 데 도움이 될 수 있습니다.

테이블의 열의 실제 순서를 변경하면 예측할 수없는 효과가 발생합니다. 행의 기본 순서가 MySQL 또는 실제로 알고있는 SQL 데이터베이스에 정의되어 있지 않기 때문입니다. 행이 추가, 변경 및 삭제되면 테이블의 행의 물리적 위치가 시간이 지남에 따라 변경되므로 주문에 의존 할 수 없습니다.

http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/에는 정렬 최적화에 대한 유용한 팁이 있습니다.

+0

좋은 기사이지만 내 문제를 해결하는 데 도움이되지 않았습니다. 정수 사이의 인덱스는 이미 있습니다. 캐시가 유일한 솔루션입니까? – Newbie1

관련 문제