Database 6

[Mysql] on duplicate key update

INSERT 할 때, 유니크 키에서 발생하는 SQL 오류. 중복방지를 위해 유니크 키를 걸어두는데, 새로운 데이터를 넣어야되는데 유니크 키 때문에 중복에러가 발생하는 경우가 있다. 그렇다고 안 걸기에는 애매하고 ,, 물론 유니크 키에 해당하는 데이터가 있는지 조회하고, 있으면 업데이트 하거나 / 데이터가 있는지 조회하고, 삭제했다가 다시 추가하는 방법도 있다. 내가 부딪힌 문제는 for문으로 쿼리문을 돌리는데, 조회하고, 있으면 -> update / 없으면 -> insert 하는 과정에서 update 할 때 이미 유니크 키에 해당하는 다른 데이터가 존재해서 update도 안 되는 상황. 예시를 보면서 얘기하자면, CREATE TABLE li_test_tbl ( idx INT(10) NOT NULL AUT..

Database 2023.08.24

[MySQL] 테이블 생성문에 timestamp & index사용하기

create 문을 사용할 때 사용하면 좋은 점 몇 가지 조언 받았다. - timestamp 날짜를 등록하는 날짜 column을 작성할 때 `today` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' `today_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 이런 식으로 작성하여 insert/update 시 column 에 하나씩 넣어줬는데 `today` timestamp NOT NULL DEFAULT current_timestamp() `today_update` timestamp NOT NULL DEFAULT current_timestamp() 이렇게 쓰면 최초 로우 생성 시에 today에 현재 시간을 자동으로 ..

Database 2022.11.28

슬레이브(Slave)란?

슬레이브(Slave)는 노예, 종속 장치를 의미한다. 다른 장치나 프로세스(마스터)에 의해 제어되는 장치나 프로세스를 의미한다. 예를 들어, 데이터베이스 복제에서 슬레이브로 여겨지는 데이터베이스는 마스터 데이터베이스에 작성된 업데이트를 사용하여 마스터와 데이터를 동기화한다. 슬레이브는 마스터로부터 업데이트를 성공적으로 받으면 메시지를 출력하여 마스터에게 알린다. 이를 통해 마스터는 슬레이브에 더 많은 업데이트를 보낼 수 있다. http://wiki.hash.kr/index.php/%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%8A%AC%EB%A0%88%EC%9D%B4%EB%B8%8C 마스터-슬레이브 - 해시넷 마스터-슬레이브(master-slave)는 하나 이상의 장치 또는 프로세스(마스터)가..

Database 2022.11.24

MySQL 인덱스

인덱스란? " 인덱스 == 정렬 " 인덱스는 결국 지정한 컬럼들을 기준으로 메모리 영역에 일종의 '목차'를 생성하는 것. insert, update, delete(command)의 성능을 희생하고 대신 select (Query)의 성능을 향상시킨다. update, delete 행위가 느린거지, update, delete를 하기 위해 해당 데이터를 조회하는 것은 인덱스가 있으면 빠르게 조회된다. 인덱스가 없는 컬럼을 조건으로 update, delete 를 하게 되면 굉장히 느려 많은 양의 데이터를 삭제 해야하는 상황에선 인덱스로 지정된 컬럼을 기준으로 진행하는 것을 추천한다. 인덱스 키 값의 크기 InnoDB (MySQL)은 디스크에 데이터를 저장하는 가장 기본 단위를 페이지라고 하며, 인덱스 역시 페이지..

Database 2022.09.02

Query Between 과 >=, <= 성능 차이

부등호와 Between 을 실행하면, Where을 이용한 부등호 비교 조회가 더 빠르다. 왜? CPU Cycle 을 적게 소모했기 때문이다. 천만건이 들어있는 테이블 아래와 같이 카운팅하는 쿼리를 작성해 실행했을 때, [x BETWEEN $1 AND $2] -> 평균 4.118333 초 [x >= $1 AND x 평균 3.442857 초 시간이 소요되었다고 한다. 두 개 쿼리의 실행계획이 동일했고, 모든 데이터가 Buffer pool에 cache(Warming up)된 상태에서 실행했기 때문에 상태는 거의 동일했다고 보여진다. 그리고 하나 더 알게 된게, MySQL에서 DATETIME 형식의 데이터를 고속으로 검색할 때는 UNIX_TIMESTAMP 함수를 이용하면 DATETIME 형식보다 3배~4배(?)..

Database 2022.08.24

쿼리 Query 최적화 및 튜닝

쿼리 최적화의 필요성 웹사이트 전문가 제이콥 닐슨은 응답 속도에 따른 유저 경험을 다음과 같이 평가한다. - 0.1초 : 즉각적인 응답이라는 느낌 - 1초 : 지연을 감지하고 컴퓨터가 결과를 처리하고 있다는 느낌을 받지만, 아직 스스로 제어할 수 있다고 느낌 - 10초 : 사용자가 집중력을 유지할 수 있는 한계 - 10초 이상 : 유저의 신경이 돌아오기 쉽지 않음 따라서, 보통 10초의 유저 경험은 사이트를 즉시 떠나게 한다고 말한다. API 콜의 지연이 유저경험에 지장을 준다면, 쿼리 최적화를 고려해볼 수 있다. 쿼리 최적화 및 튜닝 기술 1. Use Column Names Instead of * in a SELECT Statement 테이블에서 몇 개의 컬럼만을 조회하는 경우라면, SELECT * 을..

Database 2022.08.23
728x90