1. 索引的实现
索引都是使用b+树实现的
myisam实现分离索引,把索引单独保存在一个文件中,并且进行压缩,非主键的查询比较快
innodb实现cluster索引,文件本身就是按照索引排列的,主键查询比较快,但是非主键查询需要
2. myisam和innodb的区别
myisam使用索引和数据分离实现,并且对索引进行压缩,文件易于替换
innodb把索引和数据捆绑实现,索引本身即是数据文件,按照b+树格式存储(用主键做的cluster索引),没有进行压缩,文件较大,不易替换
myisam使用表锁,并且在非主键select查询时速度较快。()
innodb使用行锁,不过只对主键有效。在update的时候速度较快(因为cluster索引导致主键查询非常快,而且其他key只能通过主键查找其他索引),但是对于insert,使用主键自增会比较快。
myisam把select count(*)保存起来
innodb使用select count(*)的时候需要实时查找数据
3. explain用来对数据库进行一些分析,以便于优化
http://www.blogjava.net/persister/archive/2008/10/27/236813.html
4. mysql的查询缓存和key缓存在相关数据修改后会失效。
5. join使用nested loop join,一个表连接后依次连接其他表。
select user.id, user.name, map.name from user,map where user.idmap = map.id;
select user.id, user.name, map.name from user join map on user.dimap = map.id;
2者的区别在于第一个查询出user和map表的所有非空字段,然后进行对比。
第二个查询user表的所有非空字段,再对map表的所有非空字段对比,最后得出结果