[MySQL] 인덱스
·
Database
인덱스는 데이터베이스 쿼리의 성능을 언급하면서 빼놓을 수 없는 부분이다. 디스크 읽기 방식그전에 인덱스에만 의존적인 용어는 아니지만 자주 언급되는 디스크 읽기 방식인 랜덤 I/O, 순차 I/O에 대해 간단히 알아보자. 컴퓨터의 CPU나 메모리처럼 전기적 특성을 띤 장치는 빠르게 성장했지만 디스크같은 기계식장치의 성능은 제한적으로 발전했다.최근 SSD드라이브가 활용되고 있지만 여전히 데이터 저장 매체는 컴퓨터에서 가장 느린 부분이다.따라서 데이터베이스의 성능 튜닝은 디스크 I/O를 얼마나 줄이느냐가 관건일 때가 상당히 많다. 디스크의 헤더를 움직이지 않고 한 번에 많은 데이터를 읽는 순차 I/O의 경우 SSD가 하드디스크에 비해 거의 비슷한 성능을 보이지만,결국 SSD의 장점은 랜덤 I/O가 빠르다는 것이..
[Java] 콜백 패턴과 적용
·
JAVA
java에서의 콜백에 대해 알게되면서 동기, 비동기를 차치하고도 작업의 참조를 전달(위임)한다는 부분이 인상적깊었다. 기본적으로 콜백 패턴의 정의와 원리에 대해 알아보자. 콜백은 한마디로 피호출자 (Callee)가 호출자 (Caller)를 다시 호출하는 것을 의미한다.특정 이벤트가 발생하거나 특정 작업이 완료되면 특정 메서드를 실행하는 방법인데,비동기 처리나, 작업완료 시나리오에서 유용하게 사용된다. 간단한 웹 어플리케이션을 예시로 들어보자. 프런트 서버가 작업 서버에 일정 시간이 소요되는 작업을 요청했을 때, 사용자가 그동안 가만히 있을 순 없기 때문에작업 완료 시간을 하염없이 기다리기보단 작업 완료 신호가 오기 전까지 다른 일을 하면서 작업 완료 여부를 알고 싶을 것이다. 그렇다면 프런트 서버가 작업..
[MySQL] 인덱스와 잠금, MySQL의 격리 수준
·
Database
인덱스와 잠금InnoDB 엔진의 레코드 락 부분을 보면, 사실 InnoDB는 레코드를 잠그는 것이 아니라, 인덱스를 잠그는 방식으로 처리하는걸 볼 수 있다.즉, 변경해야 할 레코드를 찾기 위해 검색한 인덱스의 레코드를 모두 잠궈야한다. 이는 인덱스 설계가 중요한 이유와 연결되는데, 예시를 통해 알아보자.SELECT COUNT(*) FROM employees WHERE first_name = "jin"; //253SELECT COUNT(*) FROM employees WHERE first_name = "jin" AND last_name = "hyogyeom; //1 만약 employees 테이블이 first_name 컬럼만을 멤버로 가지는 인덱스를 가지고 있다고 가정해보자.first_name = jin 인..