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务必建好索引,否则锁粒度较大,会影响并发。

总结: 

MySQL两种内核对比的更多相关文章

  1. Mysql两个引擎对比

    Mysql两个引擎对比 MyIsam      优点:      1.支持B-Tree检索和文本全文检索      2.性能消耗方面相对较低      3.支持全表(table)锁      缺点: ...

  2. MySQL两种存储引擎: MyISAM和InnoDB

    MySQL两种存储引擎: MyISAM和InnoDB 简单总结   MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Me ...

  3. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  4. 爬虫2.1-scrapy框架-两种爬虫对比

    目录 scrapy框架-两种爬虫对比和大概流程 1. 传统spider爬虫 2. crawl型爬虫 3. 循环页面请求 4. scrapy框架爬虫的大致流程 scrapy框架-两种爬虫对比和大概流程 ...

  5. 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

    1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...

  6. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    转载 http://www.jb51.net/article/5620.htm MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1 ...

  7. Mysql两种存储引擎的优缺点

    MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用.MyISAM中,一个table实际保存为三个文件,.frm存储表定义,.MYD存储数据,.MY ...

  8. mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法

    SET max_length_for_sort_data = 1024 SHOW VARIABLES LIKE '%max_length_for_sort_data%'; 查询:SELECT * FR ...

  9. MySQL - 两种存储引擎 (MyISAM PK InnoDB) + MVCC

    总结 1.两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务.两者最大的区别就是InnoDB支持事务,和行锁. 2.InnoDB采用MVCC(Multi-Version Concur ...

随机推荐

  1. uni-app 尺寸单位

    uni-app 支持的通用 css 单位包括 px.rpx px 即屏幕像素 rpx 即响应式px,一种根据屏幕宽度自适应的动态单位.以750宽的屏幕为基准,750rpx恰好为屏幕宽度.屏幕变宽,rp ...

  2. SRS之信号的管理:SrsSignalManager

    1. 综述 SRS 中使用了 State Threads 协程库,该库对信号的处理是将信号事件转换为 I/O 事件.主要做法是:对关注的信号设置同样地信号处理函数 sig_catcher(),该函数捕 ...

  3. python中列表的简单用法

    1.定义list >>> li = ["a", "b", "mpilgrim", "z", " ...

  4. ftp相关

    已经存在虚拟账户 添加新账户 .在/etc/vsftpd/user.txt里面配置用户名密码 单行是用户名 双行是密码 .导入新用户密码 db_load -T -t hash -f /etc/vsft ...

  5. 左键双击关闭pagecontrol中的一个分页即一个tabsheet,功能像遨游浏览器一样

    左键双击关闭pagecontrol中的一个分页即一个tabsheet,功能像遨游浏览器一样 procedure TfrmServerSetup.PageControl1MouseDown(Sender ...

  6. StackTraceElement 源码阅读

    StackTraceElement 属性说明 /** * 每个 StackTraceElement 对象代表一个独立的栈帧,所有栈帧的顶部是一个方法调用 * @since 1.4 * @author ...

  7. JavaScript this的使用

    当作用域不同时,我们可以将this暂时性的保存下来. 例如: _this =  this.

  8. Prism框架 如何在主程序中合理的弹出子窗体

    说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最常见的实 ...

  9. Hibernate5 Guide

    (1) 创建Maven工程 可以使用Eclipse或IDEA创建 (2) 修改pom文件 <project xmlns="http://maven.apache.org/POM/4.0 ...

  10. 【转】jstat命令查看jvm的GC情况 (以Linux为例)

    [From]https://www.cnblogs.com/yjd_hycf_space/p/7755633.html jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: ...