zoukankan      html  css  js  c++  java
  • MySQL两种内核对比

    MySQL内核

    https://blog.csdn.net/baichoufei90/article/details/83504446

    关键字:全文索引 索引外置

     两种内核:MyISAM 和InnoDB

     区别

    1.count(*)

    MyISAM会存储总行数,InnoDB不会存储总行数,select count(*)时是一行一行进行扫描的,而MyISAM操作select count(*)时结果很快

    实践:数据量大的表,InnoDB就尽量不要使用select count(*)查询,性能消耗大

    备注:只有查询全表时MyISAM才会直接返回结果,加where条件之后的话MyISAM和InnoDB原理相同

    2.全文索引https://www.cnblogs.com/tommy-huang/p/4483684.html)

    MyISAM支持全文索引,InnoDB5.6之前不支持全文索引

    备注:数据量大并发量大时,不建议使用数据库自带的全文索引,应该使用索引外置的架构设计方法,MyISAM也不是最优选。

    3.事务

    MyISAM不支持事务,InnoDB支持事务

    备注:事务具有commit,rollback这些崩溃修复能力;MyISAM在系统异常崩溃时可能造成文件损坏。但是事务很耗性能,影响吞吐量,所以尽量只对一致性要求较高的业务使用事务。

    4.外键

    MyISAM不支持外键,InnoDB支持外键

    备注:数据量大并发量大时,都不建议使用外键,要通过应用程序保证数据的完整。

    5行锁和表锁

    MyISAM只支持表锁,InnoDB还支持行锁

    备注:

    MyISAM执行语句时,会对整个表加锁,数据量大并发量大时,性能影响较大

    InnoDB细粒度行锁,在数据量大时,性能影响较小

    实践:select+insert时使用Myisam,因为Myisam在文件尾部顺序增加记录速度快;但是大部分是读写混合,数据量大时就使用InnoDB

    坑:InnoDB的行锁是实现在索引上的,而不是锁在屋里行记录上,如果没有命中索引,就不能使用行锁,将使用表锁

    1.5.2 示例

    例如有用户信息表如下,且无其他索引: 

    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='shenjian'; #无索引,表锁。

    启示:InnoDB务必建好索引,否则锁粒度较大,会影响并发。

    总结: 

  • 相关阅读:
    我再说一遍-微软官方文档查询技巧分享
    你听我说-HandyControl多语言包处理
    太阳当空照-Windows服务化方式脚本封装sc指令
    你听我说-HandyControl源码编译
    太阳当空照-知识分享
    Mac多屏dock切换
    [转]浅析线性表(链表)的头插法和尾插法的区别及优缺点
    点击按钮,在textarea光标位置插入值
    优秀学习笔记汇总>o<
    解决excel文件上传时更改选中的文件出现错误net::ERR_UPLOAD_FILE_CHANGED
  • 原文地址:https://www.cnblogs.com/vanoraxnc/p/10379321.html
Copyright © 2011-2022 走看看