본문 바로가기
반응형

인덱스6

여러컬럼으로 Join 맺어야할 경우의 인덱스 실제 발생했던 쿼리) SELECT i.id, i.titles[1] title, i.icon_url, ic.user_id FROM institutions i INNER JOIN interested_corporations ic ON ic.institution_id = i.id AND ic.deleted_at IS NULL INNER JOIN users u ON ic.user_id = u.id AND u.deleted_at IS NULL INNER JOIN vouchers v ON v.user_id = u.id AND v.deleted_at IS NULL AND v.course_id = ? WHERE i.priority > ? AND i.type = ? AND NOT (u.is_admin = true AND .. 2022. 1. 7.
MySQL IN절을 통한 성능 개선 방법 잘 사용되진 않는 범위 조건 중에 IN 이 있습니다. 일반적으로 BETWEEN, LIKE, 에 비해서는 하나씩 모든 Key를 입력해야 되기 때문에 애플리케이션에서 작업양이 추가되어 선호되진 않는데요. 이 IN 절을 통해 여러 성능 개선들이 가능해서 생각보다 활용하기에 따라 많은 성능 개선을 이룰 수 있습니다. 이번 시간에는 IN 을 통한 2가지 개선 방법을 소개 드리겠습니다. 0. 소개 MySQL의 IN 절은 UNION으로 처리됩니다. 즉, eq 조건을 여러번 나눠서 실행하는 것과 같은 효과를 가지는데요. 이미 다들 아시겠지만 MySQL은 범위 조건에서는 인덱스 효과를 제대로 보지 못합니다. MySQL 인덱스 정리 및 팁 정확히는 인덱스 앞의 컬럼을 범위 조건으로 사용하는 경우 뒤의 인덱스 컬럼은 효과를.. 2021. 4. 22.
2. 커버링 인덱스 (WHERE + ORDER BY / GROUP BY + ORDER BY ) 지난 시간에 이어 이번엔 ORDER BY에 대해 알아보겠습니다. 2-1. WHERE + ORDER BY 일반적으로 ORDER BY 의 인덱스 사용 방식은 GROUP BY와 유사합니다만, 한가지 차이점이 있습니다. 바로 정렬 기준입니다. MySQL에서는 인덱스 생성시 컬럼 마다 asc/desc 를 정할수 있는것 처럼 보입니다. (젯브레인사의 DataGrip으로 인덱스 생성시 가능한 것처럼 보입니다만… 안됩니다.) 하지만 8.0 이전 버전까지는 지원하지 않습니다. 8.0 이전 버전까지는 문법만 지원되고 실제로 Desc 인덱스가 지원되는 것은 아닙니다. 단지 Ascending index 으로 만들어진 인덱스를 앞에서부터 읽을 것인지 (Forward index scan), 뒤에서부터 읽을 것인지 (Backwar.. 2020. 2. 29.
1. 커버링 인덱스 (기본 지식 / WHERE / GROUP BY) 일반적으로 인덱스를 설계한다고하면 WHERE절에 대한 인덱스 설계를 이야기하지만 사실 WHERE뿐만 아니라 쿼리 전체에 대해 인덱스 설계가 필요합니다. 인덱스의 전반적인 내용은 이전 포스팅을 참고하시면 좋습니다. 인덱스는 데이터를 효율적으로 찾는 방법이지만, MySQL의 경우 인덱스안에 포함된 데이터를 사용할 수 있으므로 이를 잘 활용한다면 실제 데이터까지 접근할 필요가 전혀 없습니다. 이처럼 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스를 커버링 인덱스 (Covering Index 혹은 Covered Index) 라고합니다. 좀 더 쉽게 말씀드리면 SELECT, WHERE, ORDER BY, GROUP BY 등에 사용되는 모든 컬럼이 인덱스의 구성요소인 경우를 얘기합니다. 1-1. 커버링.. 2020. 2. 16.
[mysql] 인덱스 정리 및 팁 MySQL 인덱스에 관해 정리를 하였습니다. MySQL을 잘 알아서 정리를 한것이 아니라, 잘 알고 싶어서 정리한 것이라 오류가 있을수도 있습니다. 1. 인덱스란? 인덱스 == 정렬 인덱스는 결국 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차를 생성하는 것입니다. insert, update, delete (Command)의 성능을 희생하고 대신 select (Query)의 성능을 향상시킵니다. 여기서 주의하실 것은 update, delete 행위가 느린것이지, update, delete를 하기 위해 해당 데이터를 조회하는것은 인덱스가 있으면 빠르게 조회가 됩니다. 인덱스가 없는 컬럼을 조건으로 update, delete를 하게 되면 굉장히 느려 많은 양의 데이터를 삭제 해야하는 상황에선 인덱스로 지.. 2017. 11. 5.
패스트캠퍼스 SQL튜닝캠프 1일차 - 인덱스 구조와 스캔 방식 1주차1. 인덱스의 구조인덱스 == 정렬인덱스는 크게 해시 인덱스와 B+Tree 인덱스가 있습니다. 해시 인덱스는 키 값을 해시값으로 변경후, 해시값+값의 구조를 얘기합니다. 해시계산의 경우 데이터 양에 의존하지 않기 때문에 데이터 양이 늘어도 계산량(O(1))은 변경되지 않는다는 장점이 있습니다. 하지만 아래와 같은 경우에 전혀 사용할 수 없습니다.가격이 10,000원 이하의 선물을 찾고 싶다.제목이 "Final"로 시작하는 게임 리스트를 찾고 싶다.최신순으로 정렬된 값을 찾고 싶다.해시 인덱스의 이런 단점을 해결하고자 B+Tree 인덱스 구조가 있습니다.B+Tree 인덱스(출처 : 구루비 위키)Root Node와 Branch Node에 표기된 lmc는 Left Most Child를 뜻합니다. (Lea.. 2017. 7. 16.

728x90
반응형