문득 지금까지 내가 한건 다 찍먹이라는 생각이 들며, 지난 나를 반성하게 되었다. db를 그냥 연결해서 쓰면 되지, 아니면 뭐 이렇게 저렇게 하다보면 되니까 주먹구구식으로 하면되지라고 생각하고 전혀 딥하게 파고들지 않았다고 생각이 들었다. 그래서 공식문서 보면서 적당히 파보려고 한다.
https://dev.mysql.com/doc/refman/8.3/en/manual-info.html
커널 스레드: 운영체제가 직접 관리하는 스레드를 의미합니다. 커널 스레드는 프로세스 내에서 다양한 작업을 동시에 처리할 수 있도록 해주는데, MySQL에서는 이를 통해 여러 사용자의 동시 접속이나 복잡한 쿼리 처리 등을 가능하게 합니다.
멀티스레드: 멀티스레드는 한 프로세스 내에서 여러 개의 스레드가 동시에 작업을 수행하는 것을 의미합니다. MySQL은 멀티스레드를 통해 여러 CPU를 효과적으로 활용하며, 이를 통해 높은 처리 성능과 효율성을 보장합니다.
즉, MySQL은 커널 스레드를 활용한 멀티스레드 설계를 통해 대용량 데이터를 빠르고 효율적으로 처리하도록 설계되었습니다.
MyISAM은 MySQL 초기부터 사용되었던 스토리지 엔진으로, 빠른 읽기 속도와 공간 효율성 등의 장점이 있다. 이러한 특징들은 MyISAM이 사용하는 B-트리 디스크 테이블과 인덱스 압축 기능에서 비롯된다.
B-트리 디스크 테이블: MyISAM은 B-트리(Balanced Tree) 인덱스를 사용합니다. B-트리는 모든 노드가 균형을 이루고 있어, 탐색, 삽입, 삭제 등의 연산이 빠르게 이루어집니다. 이 구조를 활용하면 대용량 데이터에서도 빠른 검색 성능을 보장합니다.
인덱스 압축: MyISAM은 인덱스 파일을 압축하여 저장 공간을 효율적으로 활용합니다. 이는 디스크 공간을 절약할 뿐만 아니라, 인덱스 조회 시 I/O 비용을 줄여 성능을 향상시킨다.
하지만 MyISAM은 트랜잭션을 지원하지 않고, 테이블 레벨의 락을 사용하기 때문에 대량의 데이터 쓰기 작업이나 동시성이 중요한 환경에서는 성능 저하를 일으킬 수 있다.
mysql> SELECT CONCAT(first_name, ' ', last_name)
-> FROM citizen
-> WHERE income/dependents > 10000 AND age > 30;
first_name과 last_name을 연결해서 값을 가져온다. 하지만 중간은 공백으로 띄워주고, 시민 테이블에서 가져오는데 조건은 where로 준다. income/dependents > 10000 AND age > 30 두조건을 만족하는.