北京怀柔网站建设公司天津百度推广代理商
下面主要就两个方面进行探讨
innodb 和 MYISAM 引擎的区别
B-tree 和 哈希索引的区别
INNODBy引擎和B-TREE存储
之前一问innodb有什么特别?一说支持事务,支持乐观锁(行级锁),写入比查询快。然后就没了
这不能怪我,主要是我之前读书少,之前的状态就是:读书少,想的多(这是很多应届生通病,我正视)
上面的说的innodb的三个特点,我现在只信服两个,因为自从mysql5.0以后,innodb的读写速度差距已经不是那么大了。
因为这个innodb的存储引擎有关系。B-tree存储。
B-TREE存储引擎对索引的是顺序存储。
B-TREE的索引会包含被索引的列的数据(看懂到这个我瞬间明白了,select * from tablename 为会被不建议了,因为这样会使用不到索引覆盖(之前听得没听过的))
MYISAM引擎
之前一说:myisam引擎,之前的理解是:读的数据快,但不支持事务,支持悲观锁(表锁)
现在的理解是 Myisamz支持全文索引(是一种关键字提取),在没有where的条件下select count(*)速度块,因为它有一个AUTO_INCREMENT
myisam的存储方式是三个文件,这三个文件是跨平台的。如果存储在CD-ROM这类只读的介质上面,而且MYISAM支持压缩。它就有,空间小,速度快的特点。有这个特性,它立足MYSQL众多引擎中的一员是完全有地位的。
说到最后:使用什么引擎或者建立什么类型的索引都是看应用场景。在我现在的工作中80%的场景都是innodb。
但如果可以容忍数据错误,或者对数据的正确性不是很强烈的要求。那么myisam也是不错的选择。
在说说哈希索引:
哈希索引是顺序存储的,而哈希索引的存储比较紧凑,所有查找会比较快速。(这里只有memory引擎是用的哈希索引,mysql的临时表都是用的这个引擎,如果临时表太大,临时表就没被写到硬盘上,那时的引擎是MYISAM)
基于这个原因,索引插入的开销比较大,需要维护哈希表。这就是为什么读越快于写了。
最后在说两句:
然后再说一个,之前一直觉得很高大的上的东西,就是读写分离。
如果做到读写分离,我之后会写一个博文专门说实现过程。这里先说原理:MYSQL的主从复制
MYSQL5.0以后支持了二进制同步。这样,就做一个数据库做主库专门用来写数据,然后另一个数据库做从库专门用来查数据。