zoukankan      html  css  js  c++  java
  • 关于MySQL的Myisam和Innodb的一些比较总结

    总结一下MySQL的Myisam和Innodb引擎的一些差别,权当复习了。

    首先二者在文件构成上:

    • Myisam会存储三个文件:.frm 存储表结构,.MYD存储表的数据,.MYI文件存储表的索引;所以完整的拷贝一张表这三个文件都需要。另外Myisam会对索引进行压缩。用Myisam备份会更简单。
    • Innodb也有 .frm表结构文件,但是数据存储就不同了,由于有表空间的概念,所以数据文件可能是独立的,也可能是空闲的,独立的话数据和索引都会在一个.ibd文件内。
    事务的支持:
    • Myisam不支持;所以如果你真的需要诸如事务,外键等特性,放弃它吧。
    • Innodb支持 事物,回滚等一些事务安全的ACID特性,支持外键。
    • Myisam只支持表锁,意即如果你执行了一条DML(数据操纵语言,即增删改查)语句,整张表会获得一把锁,在操作执行完之前其他人不能够再操作这张表了,所以如果表的并发高,Myisam性能会差一些
    • Myisam支持行锁,即可以只给某一行上锁而非整个表,所以在并发情况下,Update之类的操作性能会更好。当然如果一条SQL语句不能确定扫描范围时,也会锁表,诸如where like'%'的操作。更简单来说,Innodb使用where检索的列没有索引,那么就会锁表了。
    DML(Insert, Select, Update, Delete):
    • Select:一般认为Myisam的读性能会比Innodb更好,所以如果是个读多写少的项目,这点上Myisam可以有加分。
    • Insert:这个要分情况来说,单线程操作,Myisam明显会快,但是并发多的话就不一定了。还有需要说明的是Myisam支持Insert Delayed操作,如果你的应用可以接受这种使用方式(可能延迟一下才生效),那么它会更好一些
    • Update:一般认为Innodb更快
    • Delete:Innodb,它会一行行的删除表,而不是重新建立表
    其他:
    • count(*)  :Myisam会保存表的具体行数,而innodb不会,所以你在用phpmyadmin来查看时,表的行数会显示'~'大约多少行。所以select count(*) 用Myisam当然快,不过这是不加where条件的情况下
    • Myisam还支持全文索引,比如说搜索诸如某些text字段时 where * like "%*"时性能和效率会更好
    • Auto_Increment:Innodb必须包含只有该字段的索引,而Myisam可以使用联合索引。
    • Myisam建立的表可以使用Myisam_merge引擎,在某些情况下很有用。
  • 相关阅读:
    hibernate 单元測试框架
    freemarker基本数据类型
    Effective C++:条款26:尽可能延后变量定义式的出现时间
    Hive Python Streaming的原理及写法
    算法(第四版)学习笔记之java实现希尔排序
    Passing address of non-local object to __autoreleasing parameter for write-back
    VB 中窗口发现冲突名称,将使用名称...怎么解决?
    struts2基础梳理(二)
    EM算法求高斯混合模型參数预计——Python实现
    Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layou
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3331205.html
Copyright © 2011-2022 走看看