Skip to content

Instantly share code, notes, and snippets.

@blanklin030
Last active October 25, 2019 06:48
Show Gist options
  • Save blanklin030/d6043a3bac91b4654d09c5399f3c2ffb to your computer and use it in GitHub Desktop.
Save blanklin030/d6043a3bac91b4654d09c5399f3c2ffb to your computer and use it in GitHub Desktop.
mysql常用engine的区别

create table test( id int(10) not null AUTO_INCREMENT,name varchar(3), PRIMARY KEY(id), UNIQUE KEY uqe_name(name) ) engine=innodb charset=utf8;
INSERT INTO test (id, name) VALUES (1, 'aa'), (2, 'bb'), (3, 'cc');

myisam索引

非聚集索引,索引和记录是分开存放的

primary key 和 secondary key
primary key记录使用B+tree,非叶子节点是pk值,叶子节点是row storage的指针
secondary key记录也使用B+tree,非叶子节点是索引值,叶子节点是row storage的指针
row storage 记录也使用B+tree,非叶子节点是指标,叶子节点是row的内容
explain select id,name from test where id = 1;

1 SIMPLE test NULL const PRIMARY PRIMARY 4 const 1 100.00 NULL

explain select id,name from test where name = 'aa';

1 SIMPLE test NULL const uqe_name uqe_name 12 const 1 100.00 Using index

innodb索引

聚集索引,如果有primary key则使用primary key作为聚集索引,如果没有则使用not null的unique key作为聚集索引
聚集索引使用B+tree,非叶子节点存放索引值,叶子节点存放row storage

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment