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. State Threads之网络架构库

    原文: State Threads for Internet Applications 介绍 State Threads is an application library which provide ...

  2. 黑马vue---10-11、Vue实现跑马灯效果

    黑马vue---10-11.Vue实现跑马灯效果 一.总结 一句话总结: 1. 给 [浪起来] 按钮,绑定一个点击事件   v-on   @ 2. 在按钮的事件处理函数中,写相关的业务逻辑代码:拿到 ...

  3. PHP中Smarty的fetch()方法

    fetch 取得输出的内容 string fetch (string template [, string cache_id [, string compile_id]]) 返回一个模板输出的内容(H ...

  4. NodejS---require的机制

    假设Y是路径,X是文件名或目录名,当 Nodejs 遇到 require(Y+X) 时,按照下面的顺序处理: 1.如果 X 是核心模块(例如:require("http")) a. ...

  5. Tree 树形控件

    用清晰的层级结构展示信息,可展开或折叠. 基础用法 基础的树形结构展示. <el-tree :data="data" :props="defaultProps&qu ...

  6. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

  7. 走进异步编程的世界 - 在 GUI 中执行异步操作

    转载:https://www.cnblogs.com/liqingwen/p/5877042.html 走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://w ...

  8. Kubernetes中的PV和PVC

    K8S引入了一组叫作Persistent Volume Claim(PVC)和Persistent Volume(PV)的API对象,大大降低了用户声明和使用持久化Volume的门槛.在Pod的Vol ...

  9. Spark内核源码解析

    1.spark内核架构常用术语 Application:基于spark程序,包含一个driver program(客户端程序)和多个executeor(线程) Driver Progrom:代表着sp ...

  10. 【C/C++】什么是类型安全

    什么是类型安全 转自:http://hi.baidu.com/chenfalei/blog/item/f33ac0133500ac21dd540186.html 编程语言的最终梦想:静态类型安全 常听 ...