IT系统数据库运维:MyISAM与InnoDB 的区别
2020-03-31 17:28 作者:艾锑无限 浏览量:
精“服务”之道,通“技术”之理
小的时候我总在想一件事,一些体育比赛为什么没有办法超越前面的人,为什么大家还要学习,还要不停的举办比赛,一个小孩子怎么学习也没有大人跑的快,跳的高,投的远,为什么他们还是不停的练习,后来我发现,我们学习的目的不是为了超越他人,而是为了战胜自己,超越自己,让自己的潜能达到最大限度的发挥,让自己体验一把全力以赴的人生。
这个问题源自我们的企业,艾锑无限,做了十多年的企业,忽然发现超越自己的企业有无数家,那我怎么做都难以做到这个世界的第一名,这样思考下去越做越有压力,越做越觉得没有什么意思,因为一切都会过去,即使争得第一又能怎样呢?
不过当领悟到人生活着的真谛时,我发现企业存在的价值与人生完全一样,这个世界需要不同的人种,不同的语言,不同的性格,不同的思想,我们才会觉得有意义,我们才会觉得有无限探索的机会,如果全都一样,可能没有一个人愿意活好几十年。在电影《后五百年中》那些透过DNA的克隆人,每一个人都一样,活着唯一的意义就是忙着死去。这样的人生又有谁想要过呢.
其实企业也一样,这个世界需要有不同的企业,需要有个性的企业,需要有独特领悟的企业,只有这样才能让每一个不同的人去选择的时候有更多的空间和机会。才能让这个世界五彩缤纷,才能让所有人活得多姿多彩,才能让大家觉得这是一个无限可能性的世界。
从我们开始经营艾锑无限的时候,就发现原来服务他人是件很幸福的事,特别当我们为别人解决了他们很久困扰的问题,当他们看到问题已被解决,脸上露出了久违的笑容的时候,我们心里满满的,那是一种无法用语言表达的幸福。经过十几年锤炼,我们曾经在服务过程中有过被误会,有过被不理解,有过被不认同,但每当想起那一张张笑脸,我们又重新鼓起勇气,重拾信心,继续前行,因为我们深知十年磨一剑,梅花香自苦寒来的道理.
今天每一位艾锑人都知道诚心、细心、贴心三心服务是艾锑无限的服务之道,是经的起检验的服务标准,是5000多家客户体验后并极其认可的服务系统,我们认为服务不仅仅是解决客户遇到的问题,更需要解决客户遇到问题后着急的心,只要心处理好了,问题自然而然也就没有了。
技术是门学问,但好技术更是门艺术,真正的技术不仅仅是企业带来更高的效率,创造更大的价值,还能为整个社会创造一种全新的生产方式,蒸汽机取代了农耕时代,让我们有了工厂和比马跑的更快拖的更多货的车,我们称这次变革为“第一次工业革命”,100多年后人类社会生产力发展又一次重大飞跃,人们把这次变革叫做“第二次工业革命”,人类由此进入“电气时代”。这个时代产生了汽车和飞机,让我们的速度和效率发生了天翻地覆的变化.而第三次是科技的革命,并且一直延续到新千年,让整个人类进入信息时代。接下来我们很快就会发生“第四次科技革命” ,这次将以技术和数据驱动整个世界,而人将在这次革命中并非是主角,当“阿法狗”打败世界围棋冠军的时候,我们可能已经意识到这个时代的来临,技术将不仅仅是技术,技术将会引领人类的发展和变革,用好了就是艺术,用不好有可能就是一场灾难.
所以我们期望透过技术服务,找到服务人类的规律,而不是取代人类,让更多人失业,而是让人类因技术变得更强大.
IT系统数据库运维:MyISAM与InnoDB 的区别
区别:
1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。
4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);
那么为什么InnoDB没有了这个变量呢?
因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。InnoDB会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级索引不存在,InnoDB还会尝试去遍历其他聚簇索引。
如果索引并没有完全处于InnoDB维护的缓冲区(Buffer Pool)中,count操作会比较费时。可以建立一个记录总行数的表并让你的程序在INSERT/DELETE时更新对应的数据。和上面提到的问题一样,如果此时存在多个事务的话这种方案也不太好用。如果得到大致的行数值已经足够满足需求可以尝试SHOW TABLE STATUS
5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了
6. MyISAM表格可以被压缩后进行查询操作
7. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。
例如:
t_user(uid, uname, age, sex) innodb; uid PK 无其他索引
update t_user set age=10 where uid=1; 命中索引,行锁。
update t_user set age=10 where uid != 1; 未命中索引,表锁。
update t_user set age=10 where name='chackca'; 无索引,表锁。
8、InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有
9、Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI
Innodb:frm是表定义文件,ibd是数据文件
Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
如何选择:
1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。
3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;
4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
InnoDB为什么推荐使用自增ID作为主键?
答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。
innodb引擎的4大特性
插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)