INSERT AUTO_INCREMENT MySQL에서는 순차적으로 증가하는 숫자 값을 가져오기 위해 AUTO_INCREMENT라는 기능을 제공한다. AUTO_INCREMENT는 테이블의 칼럼에 부여하는 옵션 형태로 사용하므로 자동 증가 기능은 하나의 테이블에서만 순차적으로 증가하게 된다. INSERT 쿼리에서 ID를 직접 지정하는 경우 CREATE TABLE sample_tbl ( member_id INT NOT NULL AUTO_INCREMENT, member_name VARCHAR(30) NOT NULL, PRIMARY KEY (member_id) ) ENGINE=INNODB; INSERT INTO sample_tbl (member_name) VALUES ('Georgi Fellona'..
개요 애플리케이션의 코드를 튜닝해서 성능을 2배 개선한다는 것은 쉽지 않은 일이지만, DBMS에서는 몇 십배, 몇 백배의 성능 향상이 흔한 일이다. 그만큼 SQL 쿼리를 튜닝하는 법을 아는 것이 중요하다. 쿼리의 결과를 예측하는 것은 물론, 옵티마이저의 내부적인 처리 방식도 어느 정도 숙지할 필요가 있다. 쿼리와 연관된 시스템 설정 sql_mode sql_mode라는 시스템 설정에는 여러 개의 값이 동시에 설정될 수 있는데, 몇 개만 보면 다음과 같다. STRICT_ALL_TABLES : 일반적인 MySQL에서는 저장하려는 값의 길이가 칼럼 길이를 넘어가더라도 경고만 발생시킨 후 초과한 부분을 자르고 저장한다. 이 옵션을 주면 경고가 아닌 에러를 발생시켜 칼럼 길이를 넘는 데이터를 저장하는 것을 막을 수..
실행 계획? 최적의 방법을 찾아내기 위해 수많은 데이터에서 내가 원하는 데이터를 뽑아내기 위한 방법은 정말 다양할 수 있다. 그렇기에 우리는 어떤 방법이 최적이고 최소의 비용이 소모될지 결정해야 한다. 여행 계획을 세부적으로 따져가면서 세우듯이, DBMS에서도 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조하고, 최적의 실행계획을 수립한다. 옵티마이저가 이런 작업을 담당한다. MySQL에서는 EXPLAIN이라는 키워드로 실행 계획을 확인할 수 있다. 따라서 통계 정보는 실행 계획에서 상당히 중요한데, 레코드 건수가 많지 않으면 통계 정보가 부정확하여 엉뚱한 실행 계획이 도출될 수 있음을 늘 염두에 두고 있어야 한다. 필요에 따라 ANALYZE 명령어로 통..
인덱스란? 색인 (찾아보기) 보통 인덱스는 책 끝에 있는 색인으로 많이 비유가 된다. 색인의 내용을 통해 실제 데이터(책의 내용)을 찾아가게 되는데, 인덱스도 이와 유사하다. 테이블 칼럼의 값을 키로, 실제 데이터가 있는 곳의 주소를 값으로 하여 인덱스를 만들어두면, 빠르게 원하는 컬럼만을 찾아가서 조회할 수 있다. 여기서 가장 중요한 것이 바로 정렬이다. 책의 색인과 마찬가지로, 인덱스도 데이터를 최대한 빠르게 찾아갈 수 있게 칼럼의 값을 주어진 순서로 미리 정렬해서 보관한다. SortedList VS. ArrayList 프로그래밍 언어의 자료구조로 말하자면, 인덱스는 SortedList와, 일반적인 데이터 파일은 ArrayList와 유사하다고 볼 수 있다. ArrayList는 데이터가 저장되는 순서대..