두 개의 테이블 전화 와 phone_area가 있습니다.
전화 열 :
id : pk
전화 : 고유 색인
전화 데이터 :
|id| phone |
+--+-------------+
|1 | 1882601xxxx |
+--+-------------+
|2 | 1882602xxxx |
+--+-------------+
|2 | 1882602xxxx |
+--+-------------+
|2 | 1882603xxxx |
+--+-------------+
phone_area 열 :
1. ID : pk
2. 전화 : 고유 색인
3.area : varchar (20)
phone_area 데이터 :
|id| phone | area |
+--+--------+----------+
|1 | 1882601| area_one|
+--+--------+----------+
|2 | 1882602| area_two|
+--+--------+----------+
|2 | 1882603|area_three|
+--+--------+----------+
내 SQL은 다음과 같습니다.
SELECT t1.phone,t2.area FROM phone t1
LEFT JOIN phone_area t2 ON substr(t1.phone, 1, 7)= t2.phone
매우 느립니다.
SQL을 설명 할 때 유형 을 "ALL"로 표시하고 where를 사용합니다. 결합 버퍼 사용 (블록 중첩 루프)
내 SQL을 개선하는 방법은 무엇입니까?
다음 단계를 따르십시오.
ALTER TABLE phone ADD phone_cut int; --add a new column
UPDATE phone SET phone_cut = substr(phone, 1, 7); --store the cropped value of phone
ALTER TABLE phone ADD INDEX ind_name (phone_cut); -- add an index on that column
그리고 :
SELECT t1.phone,t2.area FROM phone t1
LEFT JOIN phone_area t2
ON t1.phone_cut= t2.phone
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다