나는 2 테이블에 왼쪽 조인 성명 : tbl1 약 1 백만 레코드가 있고 tbl2 약 2 천만있다. 쿼리는 약 9 초 정도 걸립니다. 나는 둘 다에 인덱스를 가지고 있지만, 쿼리가 얼마나 오랫동안 지속되는지를 고려해 볼 때 무언가가 옳지 않은 것처럼 보입니다. 여기 내 선택 성명 :어떻게 든 내 데이터베이스 또는 쿼리 속도를 향상시킬 필요가
EXPLAIN SELECT * FROM (SELECT tbl1.id, tbl1.name, tbl2.addr FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl1.name LIKE 'G%' AND tble2.addr IS NOT NULL) as tempTable GROUP BY id LIMIT 10;
+----+-------------+------------+--------+------------------+--------------+---------+----------------|
id|select_type| table |type |poss_keys|key |key_len|ref | rows | Extra
+----+-------------+------------+--------+------------------+--------------+---------+----------------
1 | PRIMARY | <derived2>|system| NULL |NULL| NULL |NULL | 0 | const row not found |
2 | DERIVED | tbl1 |range |id,name |name| 903 |NULL | 1 | Using where |
2 | DERIVED | tbl2 |ref |id,addr |id | 4 |tbl2.tbl1.id| 25 | Using where |
+----+-------------+------------+--------+------------------+--------------+---------+----------------
업데이트 : 나는 밖으로 가지고가는 경우에 는 & 단지 선택 기록 TBL1 또는 선택 문이 빠르다 (물론 1 초 이하)하지만 가입 할 때 개별적으로 TBL2에서 문을 가입 그들은 그때 그것을 onsiderably 느려 ... 나는 그들을 정확하게 합류하거나 내가 조인에 대한 특별한 색인의 일종 필요합니까? 인덱스가 작동하지 않을 때
1. 중첩 쿼리가 필요한 이유는 무엇입니까? 2. 왜 LEFT JOIN을 사용합니까? 3. 테이블 구조는 어디에 있습니까? – zerkms
왼쪽 결합은 내 2 개의 테이블을 조인하는 데 사용됩니다. 나는 임시 테이블이 필요 없다고 생각하지만, 쿼리를 수정할 때 쿼리는 여전히 오랜 시간이 걸릴 것입니다. –