数据存放在数据库中有一定的存储方式,这种是引擎。不同引擎存取,功能,占用空间大小,读取性能有区别;
好比我们保存图片,可以保存层不同的格式如JPEG,PNG,BMP等,但给我们或者用户看到实际图片的内容是一样的,直观区别是,占用系统的空间大小与清晰程度可能不同。我们保存到数据库里的数据于上述所说保存的图片特征类似,也有很多存储方式。但是,对于用户和应用程序来说,同样一张表的数据,无论用什么引擎来存储,用户看到的数据是一样的。布偶听的引擎存取,引擎功能,占用的空间大小,读取性能等可能有区别。
我们可以通过使用命令:Show index from tblName。或者通过使用可视化工具查看,比如,使用Navicat打开表,查看表设计。
MySQL常用的存储引擎有:myisam,innodb。在5.5版本前,默认是myisam,5.5版本后,默认是innodb;
那么,这两种存储引擎最大的区别是:
1、MyISAM不支持事务处理,读写操作会发生冲突,当查询和写入操作时间比较长时,会阻塞其他操作,容易导致连接堆积,有丢失数据的风险;而Innodb支持事务。在很大程度上决定了MyISAM不适合写频繁的业务;
2、MyISAM支持表锁,不支持行锁和外键,因为当执行insert和update操作时,需要锁定整个表,效率低;而Innodb支持行锁(前提是表有索引,否则也是表锁),粒度小,执行写操作时效率高,但更消耗内存;
3、Myisam有内置的计数器,存储表的行数,所以执行select count(*)from table 时,只需直接读取已经保存好的值,不需全表扫描。但innodb没有,执行此操作时,需要扫描整表;
4、Myisam是非聚集索引,索引中保存数据的地址; B+树型索引,更有利于查找
innodb是聚集索引,索引中保存实际的数据。B-树型索引
5、innodb要求表必须有主键,如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识记录的列做主键,如果没有这种列,MySQL自动为innodb表生成一个隐含字段作为主键,这个字段为6个自荐,类型为长整型。
Myisam 不要求有主键;
6、myisam不支持外键;innodb支持外键
参考文章:
https://www.cnblogs.com/0201zcr/p/5296843.html