에 의해/혼합 욱일승천의 ORDER w 쿼리를 최적화 (~는 1M 행 이제 곧 ~ 10M) (일반 데이터 외에)이 위의 열이 있습니다mysql을 : 나는 큰 테이블이
avg_visited
, % age 인기를 나타내는 float 0-1; 이상은 선험적 순위 때문에 변경할 수없는 외부 정보원으로부터
순위 선험적주는 정수 1-N
alexa_rank
좋다. 많은 행이 아직 인기가 없기 때문에 (사용자가 아직 도달하지 않았으므로) 선험적 순위는 대체 주문입니다. 그러나 인기는 이전 엔트리를 업데이트하고 이전에 랭킹이있는 사용자에게 인기를 더하거나, 일부 사용자가 실제로 그것을 쳤을 때 매우 자주 바뀝니다. 자주 SELECT id, url, alexa_rank, avg_visited FROM
개의 사이트 ORDER BY avg_visited desc, alexa_rank asc LIMIT 49500, 500
(49500의 다양한 값)을 실행합니다.
그러나, ORDER BY이 MySQL을 5.1, 이노에 http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
당 혼합 욱일승천와 인덱스를 사용할 수 없습니다.
완전히 상황을 바꿔 완전히 인덱싱 된 쿼리를 제공하려면 어떻게해야합니까?
내가 생각한 첫 번째 문제입니다. 더 좋은 해결책이 있는지 궁금 하네. – Sai
@Sai : MySQL은 거의 없습니다. 다른 엔진에서는'(인기 DESC, a_priori)'에 인덱스를 만들 수 있지만'MySQL'에는 인덱스를 만들 수 없습니다. – Quassnoi
또한 FWIW에서는'(neg_popularity, a_priori, common_data_1, common_data2)'에 커버 리지 인덱스를 사용해야합니다. 왜냐하면 select에 다른 필드가있을 경우 간단한 인덱스가 순서와 작동하지 않기 때문입니다. :/ – Sai