MySQL 인덱스 사용 전 과정 분석

사용자 표 user,user 2 를 만 들 고 표 구 조 는 같 지만 user 표 는 InnoDB 저장 엔진 을 사용 하고 user 2 표 는 MyISAM 저장 엔진 을 사용한다
 
-- Table "user" DDL
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`nickname` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
KEY `name` (`name`),
KEY `age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Table "user2" DDL
CREATE TABLE `user2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`nickname` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
KEY `name` (`name`),
KEY `age` (`age`)
) ENGINE=MyISAM AUTO_INCREMENT=131610 DEFAULT CHARSET=utf8;
표 user&user 2 에 각각 10W 개의 테스트 데 이 터 를 삽입 합 니 다
 
<?php
$example = array(
'@qq.com',
'@sina.com.cn',
'@163.com',
'@126.com',
'@gmail.com',
'@yahoo.com',
'@live.com',
'@msn.com',
'@cisco.com',
'@microsoft.com',
'@ibm.com',
'@apple.com');
$con = mysql_connect("localhost", "root", "your_mysql_password");
mysql_select_db("index_test", $con);
// 10W user & user2
for($i=0; $i<100000; $i++)
{
$temp = md5(uniqid());
$name = substr($temp, 0, 16);
$email = substr($temp, 8, 12).$example[array_rand($example, 1)];
$age = rand(18, 99);
$nickname = substr($temp, 16, 16);
mysql_query("INSERT INTO user(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");
mysql_query("INSERT INTO user2(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");
}
mysql_close($con);

echo 'success';
?>
색인 사용 분석 Explain Select*from user where id>100\G;  그림 1 설명 id>100\G;사용자 2 에서*를 선택 합 니 다  그림 2 User 표 의 데 이 터 는 User 2 표 의 데이터 와 같 고 색인 구조 도 같 지만 저장 엔진 은 다르다.그림 1 에서 조 회 는 PRIMARY 메 인 키 색인 을 사 용 했 고 조회 최적화 기 가 예상 한 결 과 는 65954 줄 정도(실제 131513)이다.그림 2 에서 조 회 는 색인 을 사용 하지 않 고 전체 표를 스 캔 했 고 돌아 온 예상 결 과 는 131608 줄(실제 131509)이 었 다.Explain Select * from user where id>100 and age>50 \G;  그림 3 설명 id>100 및 age=50\\G;사용자 에서*를 선택 합 니 다  그림 4 설명 id>100 및 age>50\\G;사용자 2 에서*를 선택 합 니 다  그림 5 설명 id>100 및 age=50\\G;사용자 2 에서*를 선택 합 니 다  그림 6

좋은 웹페이지 즐겨찾기