2023/07 3

Real MySQl CH11 쿼리 작성 및 최적화

INSERT … ON DUPLICATE KEY UPDATE 일반적인 INSERT가 수행되나, PK나 UK에 중복이 발생하면 UPDATE문이 수행된다. LODA DATA 데이터를 빠르게 적재하는 방법 단점 단일 스레드로 실행 데이터가 매우 크다면 시간이 매우 길어진다. 레코드 insert 및 인덱스 insert가 단일 쓰레드로 직렬 수행 단일 트랜잭션으로 실행 언두로그 사이즈가 커지며, 레코드를 읽는 쿼리들이 필요한 레코드를 찾는데 더 많은 오버헤드 발생 해결방안 LODA DATA로 적재할 파일을 여러개로 준비 테이블간 복사 작업이라면 INSERT .. SELECT 작업으로 진행, PK값을 기준으로 나눠서 진행 Q. 데이터를 빠르게 저장하는 다른 방법은 뭐가 있을까? 기존에 존재하는 테이블이라면 인덱스 및..

MySQL 2023.07.21

Real MySQL CH 11 쿼리 작성 및 최적화(2)

LIMIT limit은 항상 쿼리의 맨 마지막에 수행된다. limit절의 n,m값이 커지게 되면 쿼리 수행이 상당히 오래 걸리게 된다. SELECT * from salaries ORDER BY salary LIMIT 2000000,10 위 쿼리를 수행하게 되면 20000010번까지 읽은 후 마지막 10개만 반환하게 된다. 이럴경우 쿼리가 느려질 수 있다. 보통 페이징 처리를 위해 LIMIT절을 사용하게 되는데, 이럴경우 단순히 페이지 번호로 조회하지 말고 WHERE절로 읽어야할 위치를 찾고 그 위치에서 10개만 읽는 식의 쿼리가 좋다. SELECT * from salaries WHERE salary >= (이전 페이지 마지막 값) AND NOT (중복을 제거하기 위한 조건) ORDER BY salary ..

카테고리 없음 2023.07.14

[Real MySQL2] Ch11 쿼리 작성 및 최적화

쿼리 작성과 연관된 시스템 변수 SQL모드 STRICT_ALL_TALBES & STRICG_TRANS_TABLES 타입이 적절히 변하거나 값의 길이가 칼럼의 ㅚ대 길이보다 큰 경우 MySQL서버가 INSERT/UPDATE를 수행하지 않도록 하는 설정 값 11.1.2 영문 대소문자 구분 MySQL서버가 운영체제와 관계없이 대소문자 구분의 영향을 받지 않게 하려면, MySQL서버의 lower_case_table_names 시스템 변수를 설정하면 된다 . 11.3.1.1 문자열 MySQL에서는 역따움표(`)로 감싸서 예약어와의 충돌을 피할수 있다(order 전체적으로 MySQL서버의 고유한 방법을 배제하고 SQL 표준 표기법만 사용할 수 있게 강제하려면 sql_mode 시스템ㅂ 변수값에 ‘ANSI’를 설정하면..

카테고리 없음 2023.07.01