PK없는 테이블 찾기
PK가 없는 테이블에 관심을 가지는 이유
InnoDB 테이블은 오라클의 클러스터링 테이블과 유사한 구조를 지닌다.
사용자가 PK를 생성하지 않더라도 auto_increment 속성의 hidden PK가 내부적으로 생성된다.
어차피 생성된다면 명시적으로 만들어 추후 활용하는 것이 낫다.
특히 PK가 없는 테이블에서 대량의 변경 작업이 발생할 경우 secondary 장비에서 복제 지연이 발생하는 경우를 간헐적으로 경험할 수 있어, 주기적으로 모니터링하여 생성을 유도하고 있다.
PK없는 테이블 찾기
SELECT a.table_schema,
a.table_name
FROM information_schema.tables a
LEFT JOIN (SELECT table_schema,
table_name
FROM information_schema.table_constraints
WHERE constraint_type = 'PRIMARY KEY') b ON (
a.table_schema = b.table_schema
AND a.table_name = b.table_name
)
WHERE a.table_schema NOT IN (
'information_schema',
'db_helper',
'mysql',
'performance_schema',
'sys'
)
AND b.table_name IS NULL
AND a.table_type = 'BASE TABLE'
ORDER BY table_schema,
table_name;결과 예시:
+--------------+------------+
| table_schema | table_name |
+--------------+------------+
| howknow | meter_aggr |
| howknow | meter_raw |
+--------------+------------+
PRIMARY KEY 찾기
SELECT table_schema,
table_name
FROM information_schema.table_constraints
WHERE constraint_schema NOT IN (
'information_schema',
'db_helper',
'mysql',
'performance_schema',
'sys'
)
AND constraint_type IN ('PRIMARY KEY');FOREIGN KEY 찾기
SELECT table_schema,
table_name
FROM information_schema.table_constraints
WHERE constraint_schema NOT IN (
'information_schema',
'db_helper',
'mysql',
'performance_schema',
'sys'
)
AND constraint_type IN ('FOREIGN KEY');