저는이 두 쿼리에 대해 혼란 스럽습니다. 쿼리 속도가 불안정합니다. 여기 내 두 테이블 구성표입니다.두 개의 불안정한 쿼리 성능
게시물 테이블 (ID, 제목, 날짜 등) [날짜 인덱스]
관계 테이블 (news_id, relation_id) 모두와 행 당이 인덱스]
쿼리 A :
SELECT *
FROM posts
WHERE id IN (
SELECT news_id
FROM relationships
WHERE relation_id IN (?)
)
AND status = 1
ORDER BY `date` DESC
쿼리 B :
SELECT *
FROM posts AS p
INNER JOIN relationships AS r ON r.news_id = n.id
WHERE r.relation_id IN (?)
AND n.status = 1
ORDER BY n.date DESC
이제 이상한 부분은 테스트 결과입니다; 먼저 30 개의 행을 갖는 relation_id를 시도합니다.
쿼리 A : 30 총, 쿼리 5.56 초를
쿼리 B에 나섭니다 : 30 총, 쿼리
A가 적은 행에 느린 0.03 초를했다, B 적은 행에 속도입니다. 다음으로 3k 개의 행이있는 relation_id를 시도합니다.
쿼리 A는 : 3850 총 조회
그래서 이것은 더 빠른 지금 더 많은 데이터와 함께, 나를 혼란 0.70 초에 나섭니다 : 3,850 총, 쿼리는 초
쿼리 B 0.05했다. 마지막으로 하나의 + 10k 행을 가진 다중 relation_id를 시도합니다. 예; relation_id IN (1, 2, 3, 4)
쿼리 A : 18,906 총 쿼리 0.01 초
했다쿼리 B : 18,906 총, 쿼리
그래서 어떻게해야합니까 3.34 초
했다? 쿼리 A는 많은 행의 속도이지만 적은 행의 경우 느립니다. 이 검색어에 대한 다른 추천 방법은 없나요? (내 나쁜 영어 문법 실수 죄송합니다)편집 여기
SQL이들 EXPLAIN이다;
30 행 와조회 30 행 와
쿼리 B
쿼리 A의 18K 행
30 행 예제와 큰 예제에 대한 설명을 제공 할 수 있습니까? '어디서 '에 5 초가 걸리지 않아야합니다. 당신이 측정을 방해하는 다른 질문이 확실하지 않습니까? 반복 할 수 있습니까? – flaschenpost
'posts.id'에 색인이 있습니까? –
@JoachimIsaksson 예, 주 – musa