InnoDB 색인 사례 작성
1. primary key와 unique 병존
2,unique 키를 primary 키로 바꿉니다.
테스트:
표 uah Primary key(id), UNIQUE KEY('user id','fight xml id')
CREATE TABLE `uah`
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`fight_xml_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
`awards` varchar(1000) NOT NULL,
`created_at` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_uid_xmlid` (`user_id`,`fight_xml_id`)
) ENGINE=InnoDB AUTO_INCREMENT=95097 DEFAULT CHARSET=utf8
표:comuah Primary key
(user_id,fight_xml_id )
CREATE TABLE `com_uah` (
`fight_xml_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
`awards` varchar(1000) NOT NULL,
`created_at` bigint(20) NOT NULL,
PRIMARY KEY (`user_id`,`fight_xml_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
표에는 모두 9W 개의 기록이 포함되어 있다
select 쿼리 테스트:
표 uah
explain select awards from uah where user_id=80204 and fight_xml_id=42104\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: uah
type: const
possible_keys: index_uid_xmlid
key: index_uid_xmlid
key_len: 16
ref: const,const
rows: 1
Extra:
1 row in set (0.00 sec)
인덱스는 unique 키, 키len=16,type=const,cache가 없는 상황에서 select는 unique 키를 통해 키를 찾은 다음 키를 통해awards 값을 찾습니다.
표comuah:
explain select awards from com_uah where user_id=80204 and fight_xml_id=42104\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: com_uah
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 16
ref: const,const
rows: 1
Extra:
1 row in set (0.00 sec)
메인 키를 통해 직접 찾습니다.상수 조회에 속하다.Key_len=16, 색인 2차 검색이 없습니다.
두 테이블의 기본 정보:
show table status like 'uah'\G
*************************** 1. row ***************************
Name: uah
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 94803
Avg_row_length: 160
Data_length: 15220736
Max_data_length: 0
Index_length: 4734976
Data_free: 24117248
Auto_increment: 95097
Create_time: 2012-10-31 14:58:53
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
mysql> show table status like 'com_uah'\G
*************************** 1. row ***************************
Name: com_uah
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 88328
Avg_row_length: 172
Data_length: 15253504
Max_data_length: 0
Index_length: 0
Data_free: 24117248
Auto_increment: NULL
Create_time: 2012-10-31 15:03:16
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
두 개의 시계가 데이터length com_uah > uah
Avg_row_length :
com_uah > uah
그 이유는comuah표의 메인 키는 id보다 훨씬 크다.하면, 만약, 만약...aah가 2단계 인덱스를 포함하면primary 키,comuah가 더 커질 거야.
게임 업계에 있어서 빈번한 업데이트, insert, delete는 더 많은 파편을 초래하여 더 많은 무작위 IO를 초래할 수 있다.
종합: id를 메인 키로 하는 것이 적당하다
하면, 만약, 만약...uah 중user아이디 프라이머리 키 할까요?
업무가 허용된 경우 uid는primary 키로 할 수 있으며 2단계 인덱스를 포함하는 경우도 마찬가지다.(일률적으로 논할 수 없고 구체적인 상황을 구체적으로 분석할 수 없지만 이 사례 업무는 허용되지 않는다.)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.