2
나는이 다음 질의MySQL의 쿼리 최적화 [가입]
SELECT
i.*,
gu.*
vs.*
FROM
common.global_users gu
LEFT JOIN common.global_users_perms gup ON (gu.global_user_id=gup.global_user_id)
LEFT JOIN p.individuals i ON (gup.parent_id = i.member_id)
LEFT JOIN p.vs ON (i.member_id=vs.member_id AND vs.status IN (1,4))
WHERE gup.region = 'us'
AND gu.user_type=2
AND ((gu.email='[email protected]') OR (i.email='[email protected]') OR (gu.username='[email protected]'))
ORDER BY i.status, vs.member_id;
및 향후 계획
+----+-------------+-------+--------+------------------------------------------+------------------+---------+-----------------------------+--------+----------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+--------+------------------------------------------+------------------+---------+-----------------------------+--------+----------+---------------------------------+
| 1 | SIMPLE | gu | ref | PRIMARY,username,idx_user_type,idx_email | idx_user_type | 1 | const | 524243 | 100.00 | Using temporary; Using filesort |
| 1 | SIMPLE | gup | ref | global_user_id_2 | global_user_id_2 | 4 | common.gu.global_user_id | 1 | 100.00 | Using where |
| 1 | SIMPLE | i | eq_ref | PRIMARY | PRIMARY | 4 | common.gup.parent_id | 1 | 100.00 | Using where |
| 1 | SIMPLE | vs | ref | member_id,status | member_id | 4 | p.i.member_id | 1 | 100.00 | |
+----+-------------+-------+--------+------------------------------------------+------------------+---------+-----------------------------+--------+----------+---------------------------------+
빨리을 할 가능성이 있습니까? 이제 약 12 초가 걸립니다.
P. gu
테이블에만 2 개의 고유 한 type
값. 그리고 그 테이블의 모든 recirds는 1M 이상입니다.
넵, ORDER 절을 사용하지 않고 쿼리를 두 번 더 빨리 수행 할 수 있지만 제 경우에는 두 개의 다른 테이블 (그리고 첫 번째 테이블의 테이블이 아님)의 순서 절에있는 필드를 사용하는 것이 더 빠릅니다. '어떤 경우에는, MySQL은 당신이 여러 테이블을 조인하는 하여 ORDER를 해결하기 위해 인덱스를 사용 할 수 없으며, BY 순서대로 열은 모든 rows.'를 검색하는 데 사용되는 첫 번째 비상 수 테이블에서하지 않습니다 – user1016265