专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

mysql查询count,mysql中的myisam和innodb的区别_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 21:00:01       共计:3584 浏览
mysql查询count,mysql中的myisam和innodb的区别?

MyISAM 和 InnoDB 都是 MySQL 数据库的数据库引擎,其中 MyISAM 是 5.5 版本之前的默认引擎,而 5.5 版本之后,MySQL 引入了InnoDB 并且作为其默认的数据库引擎。

01. 锁

MyISAM 只支持表级锁(table-level locking),也就是任何 CRUD 的操作都会给表加上锁,而 InnoDB 则支持表级锁和行级锁(row-level locking),默认是行级锁。

Innodb 的行级锁又分几种:共享锁(S),排它锁(X),意向共享锁(IS),意向排他锁(IX);如果 SQL 语句没有使用索引,并且又不能确定操作的行,这个时候就会锁表;即使在查询条件中使用了索引字段,但是如果 MySQL 认为全表扫描的效率更高,这时候也会使用表锁,所以还是要通过执行计划确认是否真正使用到了索引。

02. 事务

MyISAM 强调的是性能,但是不支持事务;

Innodb 是支持事务的,事务级别包括未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可序列化(Serializable);

而不支持事务可能会导致:数据更新丢失、脏读、不可重复读等等;另外事务可以保障数据库崩溃后的安全恢复。

03. 外键

MyISAM 不支持外键,Innodb 支持外键。

04. 数据库文件

MyISAM 的数据库文件属于堆表,每个表在磁盘上都有三个文件,frm(存储表定义)、myd(存储表数据)、myi(存储表索引);

InnoDB 分为表空间数据文件和日志文件;其中数据文件用于保存数据和索引,它又有两种存储方式,共享表空间存储和多表空间存储;如果是共享表空间,那么所有表的数据文件和索引文件都保存在同一个表空间中,如果是多表空间,那么每个表都有一个表空间文件,用于存储数据和索引。

05. 索引

MyISAM 使用非聚集索引,也就是索引和数据分开存储,索引保存的是数据文件的指针;也就是说,主键索引和非主键索引的叶子节点都是数据文件的指针。

InnoDB 使用聚集索引,也就是索引和数据存在一个文件中;必须要有主键;不过如果使用非主键索引的话,需要两次查询,先查询到主键,然后再通过主键查询到数据;也就是说,主键索引的叶子节点是数据文件,非主键索引的叶子节点是主键的值。

另外着重指出,InnoDB 必须有主键,MyISAM 可以没有。

06. count()

MyISAM 保存有表的总行数,如果使用 select count(*) from table,直接取出该值,效率更高;

InnoDB 没有保存表的总行数,如果使用 select count(*) from table,需要遍历整个表;

当然如果是加了 where 条件的话,两种引擎都需要进行扫描。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:人生是不是已经没有任何希望_java | ·下一条:mysql 查询大数据,mysql作用在大数据中的地位_数据库

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有