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务必建好索引,否则锁粒度较大,会影响并发。
总结:
MySQL两种内核对比的更多相关文章
- Mysql两个引擎对比
Mysql两个引擎对比 MyIsam 优点: 1.支持B-Tree检索和文本全文检索 2.性能消耗方面相对较低 3.支持全表(table)锁 缺点: ...
- MySQL两种存储引擎: MyISAM和InnoDB
MySQL两种存储引擎: MyISAM和InnoDB 简单总结 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Me ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 爬虫2.1-scrapy框架-两种爬虫对比
目录 scrapy框架-两种爬虫对比和大概流程 1. 传统spider爬虫 2. crawl型爬虫 3. 循环页面请求 4. scrapy框架爬虫的大致流程 scrapy框架-两种爬虫对比和大概流程 ...
- 网络协议 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 ...
- MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
转载 http://www.jb51.net/article/5620.htm MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1 ...
- Mysql两种存储引擎的优缺点
MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用.MyISAM中,一个table实际保存为三个文件,.frm存储表定义,.MYD存储数据,.MY ...
- mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法
SET max_length_for_sort_data = 1024 SHOW VARIABLES LIKE '%max_length_for_sort_data%'; 查询:SELECT * FR ...
- MySQL - 两种存储引擎 (MyISAM PK InnoDB) + MVCC
总结 1.两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务.两者最大的区别就是InnoDB支持事务,和行锁. 2.InnoDB采用MVCC(Multi-Version Concur ...
随机推荐
- TCP发送窗口更新tcp_ack_update_window
在tcp_ack接收ACK处理函数中,如果确认当前走慢速路径,那么会调用tcp_ack_update_window函数检查窗口是否需要更新并更新之,并且更新未确认数据的位置,即更新窗口左边沿: sta ...
- Linux 安全工具之extundelete误删除恢复
一:前言 在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件 rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢. 其实 ...
- 一个继承的 DataGridView
// 允许增加一个 checkbox 列 public class DgvBase : DataGridViewX { protected override void OnColumnAdded(Da ...
- oracle设置默认值无效
一次做农行的项目,在向一个表插入数据时我们要求插入字符类型的操作日期和时间,我们这边当时采取的是给日期和时间字段设置默认值的方法:下面我简单还原一下当时的表结构 -- Create table cre ...
- kvm简介及创建虚拟化安装(1)
kvm虚拟化介绍 一.虚拟化分类 1.虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...
- 自在因梦 | 威爾伯的Fourth Turning所引發的聯想
2015-05-06 胡因梦 ...
- Oracle数据库提高sql查询效率总结
我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...
- 引入easyui的404问题
直接在webapp创建css文件夹添加easyui 引入: <link rel="stylesheet" type="text/css" href=&qu ...
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- JavaScript基础入门06
目录 JavaScript 基础入门06 Math 对象 Math对象的静态属性 Math对象的静态方法 指定范围的随机数 返回随机字符 三角函数 Date对象 基础知识 日期对象具体API 构造函数 ...