반응형
범위의 MariaDB/MySQL 조인 테이블
IP 주소가 포함된 테이블이 있습니다.
create table login_history
(
id int auto_increment primary key,
ip int unsigned,
created datetime(6) not null,
user_id int unsigned not null,
);
및 IP 범위가 있는 다른 테이블:
create table ip2location
(
ip_from int unsigned not null primary key,
ip_to int unsigned null,
country_code char(2) null,
)
다음과 같은 "on" 표현으로 두 테이블을 모두 결합하려고 합니다.
select * from login_history
left join ip2location_db1 on
ip2location_db1.ip_from <= login_history.ip_int and ip2location_db1.ip_to >= login_history.ip_int
잘 작동하고 있지만, 매우 느립니다.어떻게 하면 이러한 쿼리의 성능을 향상시킬 수 있습니까?저는 이미 두 테이블의 IP 열에 인덱스를 추가했습니다.
도와주셔서 고맙습니다.좋은 하루 보내세요!
한 가지 가능성은 다음과 같습니다.
select lh.*,
(case when ip.ip_from <= lh.ip_int then ip.country)
from (select lh.*,
(select ip.ip_from
from ip2location_db1 ip
where ip_to >= lh.ip_int
order by ip_to
limit 1
) as ip_to
from login_history lh
) lh left join
ip2location_db1 ip
on ip.ip_to = lh.ip_to;
그러면 다음의 인덱스를 활용할 수 있습니다.ip2location_db1(ip_to)
.
언급URL : https://stackoverflow.com/questions/65022630/mariadb-mysql-joining-tables-on-a-range
반응형
'programing' 카테고리의 다른 글
DB에 동일한 이름의 제약 조건이 있을 수 있습니까? (0) | 2023.07.10 |
---|---|
다중 연결 몽구스 (0) | 2023.07.10 |
상대 가상 경로 "는 여기서 허용되지 않습니다. (0) | 2023.07.05 |
유형 스크립트 반응에서 구성 요소의 하위 항목을 반복하는 방법은 무엇입니까? (0) | 2023.07.05 |
표시할 통화 형식 (0) | 2023.07.05 |