mysql
테이블 A와 B가 있습니다.
테이블 A는 모든 클라이언트의 로그, 개수는 200만개
테이블 B는 클라이언트 세부정보, 개수는 20,000개
이제 특정 조건을 충족하는 클라이언트의 로그를 필터링해야 합니다. SQL은 다음과 같습니다.
<code>SELECT A.*FROM `VIEW_DATA.basic_LOG.20160523` AINNER JOIN (SELECT AGT_ID FROM VIEW_AGENT where AGT_GRP_ID in (999)) B ON A.`BAS_AGT_ID` = B.AGT_IDORDER BY `BAS_TIME` DESC, `ID` DESC LIMIT 7;</code>
1 SIMPLE basic_log index IX_BASIC_LOG_BAS_AGT_ID IX_BASIC_LOG_BAS_TIME_ID 10 7 100 where
1 SIMPLE a eq_ref 사용 PRIMARY PRIMARY 4 cular3_data.20160523 .basic_log.BAS_AGT_ID 1 100
1 SIMPLE b eq_ref PRIMARY PRIMARY 4 cular3.a.AGT_GRP_ID 1 100 인덱스 사용
1. (999)의 AGT_GRP_ID를 =999의 AGT_GRP_ID로 변경합니다.
2. 필수 항목에 대한 색인을 생성하세요
참조 출처:
MySQL에서 중첩된 조인을 최적화하는 방법 http://www.data.5helpyou.com/article272.html
두 테이블을 역순으로 작성한 후 내부 링크를 외부 링크로 변경하고 (999)의 AGT_GRP_ID를 =999;의 AGT_GRP_ID로 변경합니다.
A.*,B.AGT_ID 선택
FROM VIEW_DATA.basic_LOG.20160523 A ,VIEW_AGENT B 여기서 B.AGT_GRP_ID=999 및 A.BAS_AGT_ID = B.AGT_ID
ORDER BY A.BAS_TIME DESC, A.ID DESC LIMIT 7로 바꿔보세요