MYSQL은 클러스터링 인덱스임 B+tree트리임 B-tree랑은 다르게 리프노들들끼리 순차적으로 연결되어 있는 특성이 있음
즉 링크드 리스트 형태로 리프노드들끼리 연결되어 있음
그래서 테이블 풀 스캔을 하게되면 이 링크드 리스트를 쭉 긁어서 읽음(부연 설명: 프라이머리 키 인덱스를 쭉 읽음 이거는 다른 세컨더리 인덱스도 인덱스 풀스캔하면 그냥 포인터 따라 읽으면됨)
그럼 실제 데이터 페이지가 어떻게 저장되어 있냐가 중요하게 됨 결국 이게 랜덤하게 저장되어 있으면 랜덤 I/O나 다름이 없음
근데 MYSQL은 최대한 물리적인 데이터를 가깝게 모아서 저장함 클러스터링이기 때문에
그래서 순차 I/O에 가깝게 동작함 내가 설명하는 내용중 틀린게 있음?
반면 세컨더리 인덱스로 긁으면 당연히 랜덤 I/O 이유는 뭐 다 아니까 설명안하겠음
프라이머리 인덱스에서는 레코드가 리프노드 각요소에 달려있고 그거 쭉 긁는다 가정하면 pk 순차적으로 증가하면서 다음 페이지로 포인터 따라가는거면 이건 어쨋든 랜덤io인데 님말대로 mysql은 클러스터링으로 최대한 모아서 저장하는거라 거의 순차급으로 돌아간다 이거임? 커버링으로 작동 못하는 쿼리인경우 세컨더리 인덱스는 사실상 완전히 랜덤io라고 저번에 딘퐁씨한테 답변 받았었음
아니 물리적으로 최대한 연속되게 저장하면 어떻게 그걸 쭉 읽는게 랜덤 I/O가 되겠음 순차 I/O로 동작함 MYSQL은 최대한 PK가 가까운 데이터들끼리 모이게 저장함 물론 완벽하게는 보장 못함 그래서 결국 완벽한 순차 I/O냐 no지만 순차 I/O에 가깝게 동작함
세컨더리 인덱스는 랜덤 I/O로 동작하지 세컨더리 인덱스의 정렬 순서가 pk가 순차적인게 아니니가
최대한 물리적으로 가깝게 모아준다는게 디스크상에서 다음 페이지 포인터까지 최대한 근접하게 위치하게끔 해준다는건가 아무튼ㄱㅅ
ㅇㅇ 결국 물리적으로 랜덤하게 저장되어 있으면 그게 어떻게 순차 I/O임
Db파일 헥스로 열어보면 어느 순간에 정렬돼서 저장돼있던데
ㅇㅇ 최대한 모여있는거를 보장해줌 애초에 그게 클러스터링인데
완벽하게 그럼 순차적으로 저장하냐 ? 아니 그럴순 없지 근데 최대한으로 보장해준다니까
btree 인터널노드에도 저장하고 b+tree는 리프노드에만 데이터저장함. mysql은 리프노드끼리 연결하는 변형b+tree
이게 정확하긴 함
정확하긴함은 시발아 ㅋㅋ 걍 틀려놓고 반쯤맞은척하네
장애인새~끼 알고있었는데 설명을 안한거야 밑에 질문의 요지가 저게 아니였거든 ㅋㅋ
그리고 시~발련아 링크드 리스트로 연결되어 있는걸로 B+tree라고 한건데 여기서 틀린건 없는데 ?
공식문서 다시읽고와라 ㅋㅋ 대놓고 'mysql은 리프노드끼리 연결된 변형btree 사용합니다" 써있는데 ㅋㅋ 걍 "아 맞네 그거 잘못적었음" 아니면 "헷갈렸네" 이렇게 말하던가. 정확하긴함 이지랄하면서 방어기제 세우는게 꼴같잖아서 한아디한거에 긁혀가지고 ㅋㅋ
MYSQL 공문이 틀린거야 븅~신련아 B+tree자체가 리프노드들끼리 연결되어 있는게 b-tree와 b+tree의 차이점 이구만 병~신이 자료구조도 모르고 깝치네
데이터 저장방식에 대한 차이도 있고 ㅇㅇ
이새끼 차에코보다 더 정신병자네 ㅋㅋㅋ 공식문서가 틀렸다고 삐대는거보소 ㅋㅋ 그리고 새꺄 만약 진짜 틀렸고 애초에 mysql이 쓰는게 변형b+tree 가 아닌 일반 b+tree면 니가 첫마디에 "이게 정확하긴함" 이소리는 왜한거냐? ㅋㅋ 웃긴새끼네이거
https://stackoverflow.com/questions/64871683/mysql-index-use-b-tree-or-b-tree
이거나
보고 공부나 하고와 B+tree 맞다잖아 ㅋㅋ ㅈ밥 컷
다시찾아보니까 변형이라는게 더블링크드리스트였네. 요건 내가 헷갈렸음. 근데 어쨌든 변형 쓰는거맞잖아 이 시벌럼아 ㅋㅋ
ㅇㅋ 나도 선처해서 글 지울게
그리고 정확하긴함 이지랄은 왜했냐고 ㅋㅋ 니새끼 결국 급하게 구글링때리고 이제와서 다알고있었던척하는게 개역겹네 ㅋㅋ
B+tree라는건 원래 알고있었어 근데 변형 B+tree라길래 pk를 value에 저장해서 변형이라하나? 이런 생각에 정확하긴함 이랬던거지 ㅋㅋ
걍 모르면 모른다고 하자 좀 왜자존심세우지 그게그렇게 꼴받을일인가
걍 니도나도틀린거 서로잘한거없는데, 자존심은세우지말자 보기존나추함
나도 틀린거 인정한 부분 많은데? 근데 이건 맞아서 인정을 안하거지
https://gall.dcinside.com/mgallery/board/view/?id=backend&no=20020
https://gall.dcinside.com/mgallery/board/view/?id=backend&no=19540
이거
봐라 나도 틀리면 인정한다
그냥 정리하면 순차I/O가 완벽한 물리적 정렬은 아니지만 물리적 인접이라 거의 시간소모가 없는거네 - dc App
물리적인 관점이 아니라 단순히 검색할 레코드들이 모여있다의 관점에 가까움 1번의 블록 IO 만으로도 많은 레코드를 얻을수 있음 테이블 액세스는 1개의 레코드 검색하려고 1개의 블록 IO를 소모해야하는데
그치 세컨더리는 레코드 수 곱하기 블록 I/O이고, 클러스터링은 블록 개수만큼 I/O네 - dc App