자주 쓰는 MariaDB 쿼리 정리 / MySQL 사용법

MySQL DDL 쿼리

https://0songha0.github.io/plan-design-db/2025-01-08-1


MySQL DQL 쿼리

https://0songha0.github.io/plan-design-db/2025-01-08-2


MySQL DML 쿼리

데이터 INSERT문

INSERT INTO 테이블명 (
	컬럼명1,
	컬럼명2
) VALUES (
	'값1',
	'값2'
);

INSERT INTO DB명.테이블명 시 에러

SQL Error [1142] [42000]: (conn=1043447) INSERT command denied to user 'DB명'@'10.0.0.4' for table '테이블명'

개발 DB명과 운영 DB명이 다른 경우, 쿼리에 DB명이 들어가면 위와 같은 에러가 날 수 있습니다.
쿼리에서 DB명을 제거하고, ‘INSERT INTO 테이블명’으로 실행하면 됩니다.

UPDATE 문

UPDATE 테이블명
SET 컬럼명 = '변경값'
WHERE 컬럼명 = '값'

조회 조건에 해당하는 row에 대해 컬럼 값을 변경합니다.

JOIN으로 조회된 행 DELETE

DELTE    
	a
FROM
	테이블1 a
INNER JOIN
	테이블2 b
ON
	b.키열 = a.키열
WHERE
	b.열 = '값'

DELETE문 실행 전에는 항상 FROM 이하 구문을 SELECT 해서 어떤 데이터를 삭제하는지 확인해야 합니다.


MySQL 설정

MySQL 타임아웃 설정 방법

SET GLOBAL max_execution_time=30000;
-- 최대 쿼리 실행 시간 (밀리초)

SET GLOBAL wait_timeout=30;
-- 비대화형 유휴 연결 타임아웃 (초)

SET GLOBAL interactive_timeout=30;
-- 대화형 터미널 세션 타임아웃 (초)

DBMS 자체 타임아웃 설정 방법입니다.
JDBC 타임아웃 설정이 더 일반적이나, 둘 다 설정하는 것이 안전합니다.

MySQL DB 타임아웃 시간 조회

SHOW VARIABLES LIKE 'max_execution_time';

DB 쿼리 타임아웃 시간을 확인하는 쿼리입니다.


MySQL DB 정보 확인

DB 목록 조회

show databases

DB 서버에 속한 모든 DB 이름을 조회할 수 있습니다.

MySQL 쓰레드 조회 쿼리

활성 쓰레드 수

SHOW STATUS LIKE 'Threads_connected';

현재 연결된 클라이언트 수를 보여줍니다.

현재 실행 중 쓰레드 수

SHOW STATUS LIKE 'Threads_running';

현재 연결된 클라이언트 중, 대기하는 클라이언트를 제외하고 쿼리를 실행 중인 클라이언트 수만 보여줍니다.

최대 쓰레드 수

SHOW VARIABLES LIKE 'max_connections';

1,000개 연결 허용 시 최소 1GB 이상의 메모리가 필요하며, CPU 과부하 발생을 고려하여 적절한 설정이 필요합니다.

현재 모든 쓰레드 상태

SHOW PROCESSLIST;

각 쓰레드의 Id, User, Host, Command, State, Time, Info 정보가 포함됩니다.
어떤 쿼리가 실행 중인지, 어떤 상태인지 등을 확인할 수 있습니다.


MySQL 인덱스 관련 쿼리

테이블 인덱스 조회 쿼리

SHOW INDEX FROM 테이블명;
  • Key_name : PK 인덱스는 PRIMARY, 논클러스터드 인덱스는 인덱스명으로 표현
  • Seq_in_index : 인덱스 내에 현재 컬럼이 포함된 순서
  • Column_name : 인덱스가 적용된 컬럼명
  • Cardnality : 선택도 (선택도가 높은 = 유니크한 값이 많은 컬럼에 인덱스를 걸면 쿼리 성능이 더 좋습니다.)

인덱스 생성 쿼리

CREATE INDEX 인덱스명 ON 테이블명 (컬럼명);
-- 인덱스명 예시 : idx_테이블명_컬럼명1_컬럼명2 또는 idx_테이블명_순번

테이블 잠금이 발생할 수 있으므로, 운영 중 인덱스 생성은 지양해야 합니다.
논클러스터드 인덱스 추가 시 테이블 데이터와 별도로 저장되며, 물리적인 데이터 정렬과는 무관합니다.

인덱스 삭제 쿼리

DROP INDEX 인덱스명 ON 테이블명;

Leave a comment