728x90

2024/09 6

8) Generated 컬럼 및 함수 기반 인덱스

Generated Column표현식으로 정의된 컬럼정의된 표현식에 따라 컬럼의 값이 자동으로 생성표현식 = 고정된 값, 함수 또는 다른 컬럼들에 대한 연산 조합 등이 해당사용자가 직접 값을 입력하거나 변경할 수 없음두 가지 종류가 존재Virtual Generated Column (가상 컬럼)Stored Generated Column (스토어드 컬럼)기본적으로 virtual 타입으로 생성 & null 값을 허용한다.primary key 로는 stored 타입만 허용한다.하나의 테이블에서 가상 컬럼과 스토어드 컬럼 혼합해서 사용 가능하다. 컬럼의 값을 디스크에 저장하지 않는다.컬럼의 값은 레코드가 읽히기 전 또는 before 트리거 실행 직후에 계산된다.인덱스 생성이 가능하고 , 인덱스 데이터는 디스크에 저..

7) select for update

select for update/ share 모두 현재 record에 잠금을 걸어야 하기 때문에 격리수준에 관계 없이 최신 commit을 읽어오게된다.A의 balance가 100일 때 for update없이 2개의 session에서 select한후에 -100을 수행하면 계좌가 -100인 상태가 되어버린다.이를 방지하기 위해 select ~ for update를 통해 exclusive lock을 걸어서 더 이상 dml이 작동못하게 막은후에 현 트랜잭션에서만 dml 작업을 수행하게 한다.굳이 select for update를 쓰지말고 update where절에 조건을 넣어주고 처리된 row 행 숫자 값으로 부가적인 처리를 할 수 있다.select for update자체에 where 절을 추가해서 불필요한 l..

5) Stored Function, 6) Lateral Derived Table

Deterministic 동일 상태와 동일 입력으로 호출 -> 동일한 결과 반환그렇지 않은 경우 -> not deterministic func1 , func2 를 where 조건으로 하고 각각 몇번 호출이 되었는지 세보았다.각 함수는 사용자 정의 variable에 +1을해서 자기자신이 몇번 호출 되었는지 알 수 있게해주는 함수이다.explain 결과를 보면 deterministic 은 primary key index를 통해서 1개의 row만 본것을 알 수 있다. 실제 쿼리도 optimize되어서 where true로 변경되었다. 하지만 결과는 3회 호출인데 이는 실제 실행계획말고도optimziation check, evaluate constants , process filters 등 여러 다른 query..

3) COUNT(*) & COUNT(DISTINCT) 튜닝 4) 페이징 쿼리 작성

대부분은 Count(*) 쿼리가 select * 보다 빠를것으로 예상하지만 실제로는 동일한 경우가 더 많다. limit조건 때문에 차이가 나게 된다. count의 경우 limit조건이 무의미하기 때문이다.orm에서 자동 생성된 쿼리 실행때문에도 문제가 생긴다.select count(distinct(id)) as counter from tab where fd1 = ?;단순히 count *으로 fd1에 해당되는 row의 숫자만 세려고 했는데 훨씬 부하가 더 많은 count(distinct(id)) 로 처리하는 경우도 있다. 2개의 쿼리 둘다  index가 걸린 column을 기준으로 record를 다 찾은다음에 index가 걸리지않은 column에서 B값과 일치하는것을 하나하나 확인하는 방식으로 동작한다. ..

1) CHAR vs VARCHAR 2) VARCHAR vs TEXT

Char vs VarChar모델링논리 모델링 (업무 전문가)업무 분석엔티티 , 속성, 관계 도출정규화물리 모델링 (dbms 전문가)dbms 벤더별 최적 컬럼 타입 선정접근 패턴 분석반 정규화인덱스 전략 수립 Char vs VarChar공통점문자열 저장용 컬럼최대 저장 가능 문자 길이 명시 (바이트 수를 의미하는 것이 아님) , CHAR(10), VARCHAR(10)둘다 10글자까지 만 저장가능하다는 의미이다.차이점값의 실제 크기에 관계 없이 고정된 공간 할당 여부최대 저장 길이 = CHAR(255) vs VARCHAR(16383) == 65535 바이트저장된 값의 길이 관리 여부 (VARCHAR 와 , 가변길이 문자셋 사용하는 CHAR는 저장된 값 길이 관리)0~255bytes  => length-byt..

728x90