Real MySQL 9

내맘대로 정리하는 Real MySQL #16 #17장) 베스트 프랙티스와 응급처치

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 16장. 베스트 프랙틱스 임의 정렬 기준을 아무것도 적용하지 않은 임의의 순서대로 가져오는 방법 SELECT * FROM tb_member ORDER BY RAND() LIMIT 1; record 건수나 WHERE로 걸러진 record 건수가 많다면 문제될 수 있다. 인덱스를 사용한 임의 정렬 임의의 정수 필드를 테이블에 항상 랜덤하게 추가 저장한다. 이 column에 index를 걸어 램던 조회시 random 값을 하나 골라 그 보다 큰 것 3개, 작은 것 3개를 가져와 union을 건다 페이징 인덱스를 사용한다 하더라도 계속해서 다..

내맘대로 정리하는 Real MySQL #14 #15장) 데이터 모델링과 데이터 타입

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 14장 데이터를 모델링할 때 각 개체가 어디서부터 어디까지를 포함할 것인지를 명확히 하는 것은 매우 중요하다. Attribute는 반드시 독자적인 성질을 가지는 하나의 값만을 저장해야 한다 식별 관계 : 부모의 식별자가 자식 엔티티의 레코드를 식별하는데 꼭 필요하다면 그 관계는 식별 관계다. 비식별 관계 : 부모 엔티티의 식별자가 없어도 자식 엔티티의 레코드가 생성될 수 있을 때 비식별 관계를 사용한다. 순환관계를 계층형관계로 고친다고 해서 나아지는 것은 아무것도 없다. 15장 칼럼의 데이터 타입과 길이를 선정할 때 가장 주의해야 할 ..

내맘대로 정리하는 Real MySQL #13.1장) 프로그램 연동 (JDBC)

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 실제로 현장에서 가장 취약한 부분은 애플리케이션과 데이터베이스를 연결하는 인터페이스 부분이다. JDBC와 같은 인터페이스 부분은 애플리케이션과 MySQL 데이터베이스의 중간에 위치하고 있어서 양쪽의 특성을 잘 알지 못하면 최적의 옵션을 선택하기가 쉽지 않다. Connector/J MySQL의 JDBC 이름 JDBC URL MySQL 서버의 정보를 표준 포맷으로 조합한 문자열. 때로는 connection string이라고도 한다 jdbc:mysql:// 은 고정된 값으로 MySQL 서버에 접속하기 위한 JDBC URL 임을 알려주는 프로..

내맘대로 정리하는 Real MySQL #7장) 쿼리 작성 및 최적화

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 이번 장에서는 쿼리의 각 패턴별로 "어떻게 처리되는가?"를 살펴보겠다. 또한 많이 알려져 있지 않지만 프로그램 코드를 상당히 줄일 수 있는 유용한 쿼리 패턴도 함께 살펴보겠다. 내맘대로 정리하고 싶었으나, 페이지 수가 무려 180p인 크고 아름다운 Chapter라서 필요하다면 세부 주제별로 잘개 쪼개 정리해보았다. (앗 생각해보니 어차피 내맘대로구나..!) 쿼리와 연관된 시스템 설정 lannstark.tistory.com/38 MySQL sql_mode 설정과 옵션 sql_mode 옵션은 SQL의 작성과 결과에 영향을 미치는 옵션이다...

내맘대로 정리하는 Real MySQL #10장) 파티션

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 파티션이란 MySQL 서버 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션이다. 일반적으로 DBMS의 파티션은 하나의 서버에서 테이블을 분산하는 것이며, 원격 서버 간에 분산을 지원하는 것은 아니다. 파티션을 사용하는 이유 한 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적인 예이다. 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 레코드..

내맘대로 정리하는 Real MySQL #6장) 실행계획 - MySQL 쿼리 동작 방식 편

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? '풀 테이블 스캔'을 제외한 나머지는 모두 스토리지 엔진이 아니라 MySQL 엔진에서 처리되는 내용이다. 또한 MySQL 엔진에서 부가적으로 처리하는 작업은 대부분 성능에 미치는 영향력이 큰데, 안타깝께도 모두 쿼리의 성능을 저하시키는 데 한몫하는 작업이다. 스토리지 엔진에서 읽은 레코드를 MySQL 엔진이 아무런 가공 작업도 하지 않고 사용자에게 반환한다면 최상의 성능을 보장하는 쿼리가 되겠지만, 우리가 필요로 하는 대부분의 쿼리는 그렇지 않다. MySQL 엔진에서 처리하는데 시간이 오래 걸리는 작업의 원리를 알아둔다면 쿼리를 튜닝하..

내맘대로 정리하는 Real MySQL #6장) 실행계획 - 실행계획 읽기 편

시리즈는, 책을 읽으며 몰랐던 내용을위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? DBMS에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. DBMS에서는 옵티마이저가 이러한 기능을 담당한다. MySQL에서는 EXPLAIN이라는 명령으로 쿼리의 실행 계획을 확인할 수 있다. 옵티마이저 MySQL 서버에서 쿼리가 실행되는 과정은 크게 3가지로 나눌 수 있다. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리한다. SQL의 파싱 정보(파싱 트리)..

내맘대로 정리하는 Real MySQL #5장) 인덱스

시리즈는, 책을 읽으며 몰랐던 내용을 위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 인덱스는 DB 쿼리의 성능을 언급하면서 빼놓을 수 없는 부분이다. 이번 장에서는 MySQL 쿼리의 개발이나 튜닝을 설명하기 전에 MySQL에서 사용 가능한 인덱스의 종류 및 특성을 간단히 살펴보겠다. 각 인덱스의 특성과 차이는 상당히 중요하며, 물리 수준의 모델링을 할 때도 중요한 요소가 될 것이다. 5.1 디스크 읽기 방식 DB의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 상당히 많다. 모든 저장 매체는 내부적으로 1개 이상의 디스크 드라이브를 장착하고 있다. 대부분의 저장 매체는 디스크 드라이브의 플래터(디스크 ..

내맘대로 정리하는 Real MySQL #4장) 트랜잭션과 잠금 - 트랜잭션 편

시리즈는, 책을 읽으며 몰랐던 내용을 위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 트랜잭션이란 작업의 완전성을 보장해주는 것 논리적인 작업 모음을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다 MEMORY 스토리지 엔진 혹은 MyISAM 스토리지 엔진은 트랜잭션 기능이 없다. 트랜잭션 기능이 없다면 애플리케이션에서 일부의 쿼리만 실행된것에 대한 후처리를 정말 끔찍하게 해야하지만 트랜잭션을 활용하면 try - catch 로 깔끔하게 처리된다. try { START TRANSACTION; INSERT INTO tab_a ...; I..