저자가 50 명이 넘는 articleAuthors 테이블을 가정 할 때 원하는 구성 요소를 미리 쿼리하여 원하는 50 개의 레코드로 제한합니다. (author_id)에 색인이 있는지 확인하십시오. 또한 authors 테이블에 (id)에 대한 색인이 있는지 확인하십시오. prequery에 내려 계수에 의해
select
a.*,
JustAuthorIDs.cntPerAuthor
from
(select
aa.author_id,
count(*) cntPerAuthor
from
articleAuthors aa
group by
aa.author_id
order by
cntPerAuthor DESC
limit 50) JustAuthorIDs
JOIN Authors a
on JustAuthorIDs.author_ID = a.id
순서로 조회를 변경은 사전 플러시 먼저 가장 큰 수에 의해 사전에 주문하고 50 개 기록 후 정지됩니다. 그런 다음 authors 테이블에 간단한 조인을하여 이름과 다른 것을 가져옵니다.
"bill board"라는 저자가있는 경우 이름 대신 author_ID를 기준으로 그룹을 만들었습니다 ... 실제 ID는 둘 사이에서 구분됩니다.
위의 쿼리를 사용하면 항상 모든 백만 건의 레코드를 쿼리해야합니다. 이런 식으로 authors 테이블에 하나의 "AuthoredItems"열을 추가하는 것이 좋습니다. 그런 다음 authorArticles 테이블의 트리거를 통해 항목이 추가되거나 삭제되면 작성자 테이블에서 한 명의 작성자에 대한 최종 개수를 업데이트하면됩니다. 그런 다음 "AuthoredItems"열에 색인을 만듭니다. 그런 다음 수행을 통해 수퍼 유저가 간단하게 처리 할 수 있습니다.
select a.*
from authors a
order by a.AuthoredItems
limit 50
이 테이블의 색인은 무엇이며, 조회에 대한 Explain 출력을 게시 할 수 있습니까? – Ben
빠른 질문 ... articleAuthors 테이블에 50 명이 넘는 저자가 있습니까? – DRapp
@Ben -'authors' 테이블'author_name'에 풀 텍스트 인덱스가 있고'id'에 프라이 머리 키 인덱스가 있습니다. 'articleAuthors' 테이블에서'article_id'의 키 인덱스 인'author_id'와'id'의 프라이 머리 키 인덱스에 대한 키 인덱스를 가지고 있습니다. 나는 설명 출력을 순간적으로 게시 할 것이다. – bodacydo