MySQL의 행동을 정말로 이해하고 있습니까?

3297 단어 MySQL입문

소개



이 기사는 CyberAgent 20 신졸 엔지니어 Advent Calendar 2019의 셋째 날 기사입니다.

이번 기사는 올 여름에 내정자 바이트를 실시했을 때,
나 「sql로 ORDER BY를 붙이지 않는 경우의 순서대로 primary key순이 아닌가요?」
트레이너 씨 「그것은 실행 계획에 의존할까」
나 「?」
가 되었으므로, 나름대로 조사한 것을 정리한 것이 됩니다.

내정자 바이트의 기사는 또 나중에 씁니다(늦어져 있어 정말로 죄송합니다.).
덧붙여서 내정자 아르바이트에서는 이런 일을 하고 있었습니다.
htps : // 라고 해서 r. 코 m / 우에 _ k k / s 타츠 s / 1192731466070806530

실행 계획이란?



SQL 문은 아래 그림과 같이 처리됩니다.



즉, 실행 계획이란 통계 정보를 바탕으로 옵티마이저가, 어떻게 데이터 액세스를 실시해 SQL을 실행하는지를 정리한 것이 됩니다.

실험



그러면 본제의 ORDER BY를 붙이지 않는 경우의 정렬 순서는 primary key순인지에 대해 실험해 갑니다.

MySQL 버전은 8.0.18입니다.
또한 스토리지 엔진은 바이트에 맞게 InnoDB를 사용합니다.

먼저 날짜를 기본 키로 내림차순으로 초기 데이터를 입력합니다.
이미지로서는 동영상 전달 사이트의 코멘트의 테이블입니다.


InnoDB의 데이터 구조는 클러스터형 인덱스이므로 primary key가 있는 테이블의 경우 데이터는 primary key의 키 값으로 정렬되어 있습니다.
그래서 ORDER BY를 붙이지 않아도 primary key순으로 되어 있습니다.


실행 계획도 살펴보면 인덱스를 사용하지 않는 것을 알 수 있습니다.


다음에 인덱스를 사용하도록 sql을 실행하면 인덱스에서 지정한 키 순서가 우선되어 늘어서 있는 것을 알 수 있습니다.


실행 계획을 보면 인덱스를 사용하고 있음을 알 수 있습니다.


이런 식으로 실행 계획에서 인덱스를 사용하는 경우 인덱스 키가 우선적으로 정렬되므로 primary key 순서로 정렬하려면 ORDER BY를 사용하여 sql을 실행해야합니다. .


요약



이번은 내정자 아르바이트중에 생각했다, 생각해 보면 그렇게 되어 있었던 것을 조사해, 정리해 보았습니다.
거동을 이해하고 있지 않으면 트러블이 될 수 있으므로, 알고 있어 손해는 없다고 생각합니다.
이번 예라면, 동영상 전달 사이트의 코멘트는 기본적으로 투고순으로 표시하기 때문에, primary key순으로 정렬되어 있지 않으면 곤란하네요.
읽어 주셔서 감사합니다.

참고



htps : // bg. 카미포. 네 t/엔 try/2016/12/24/234944
htps : // 이 m/아 t_1016/이고 ms/33186523cfc20fb58675

좋은 웹페이지 즐겨찾기