Open DaehunGwak opened 2 years ago
ENGINE=INNODB
라는 키워드가 CREATE TABLE
구문 끝에 달렸었다.그거 필요없으니까 없애세요
라고 했는데, 영문도 모르고 그냥 지웠었는데, 이제 이 책을 읽고 나니 ENGINE
과 INNODB
가 무엇인지 알게 되었다. CREATE TABLE temp_emplyee LIKE employees
LIKE를 붙이면 테이블 구조만 동일하게 복사가 된다고 한다. (오오~)ALGORITHM=INPLACE
붙여주면 잠금 없이 온라인으로 인덱스 생성이 가능하다고 한다.ALTER TABLE temp ALTER INDEX ix_firstname INVISIBLE
하면 해당 인덱스를 사용안함으로 만들 수 있다고 한다. ( 팀 내에 Boolean 인덱스가 있는데 INVISIBLE 마렵다. )information_schema.innodb_trx
테이블에서 확인할 수 있다고 한다.온라인 / 오프라인 알고리즘에서와 마찬가지의 맥락으로 온라인이라고 부른다.
alter table 명령시 instant > inplace > copy 순으로 검토해서 가능한 걸 적용한다.
instant: 테이블 변경 없이 테이블 메타데이터만 변경. 레코드 갯수에 영향을 받지 않는 방식.
inplace: 임시 테이블로 레코드를 옮기지는 않고 테이블 스키마를 변경. PK 칼럼을 추가하거나 하는 경우 테이블 리빌드를 할 수도 있다.
임시테이블 안 쓰는건 아니다! PK 추가하는 경우에 inplace 알고리즘도 임시테이블 쓴다고 나와있음 (copy보단 효율적)
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
copy: 변경된 스키마를 적용한 테이블을 만들고 거기에 레코드를 다 넣은 뒤 최종적으로 임시 테이블을 진짜 테이블로 리네임하는걸로 처리. 처리 도중에 DML을 실행할 수 없고 읽기만 가능하다.
inplace / copy의 경우 잠금 수준을 지정할 수 있다.
온라인 DDL은 실패할수도 있음.
그 외 쿼리 문장과 쿼리별 설명들은 대략 넘겼습니다.
운영체제 캐시와 MySQL 서버의 버퍼 풀에 따라 쿼리 성능이 영향을 받을수 있다는 걸 염두하자.
,
로 하는 나라? 베트남
진도
일시
2022.07.31.(일) 21:00