mysql
文章平均质量分 72
陈豪小可爱
生活需要操练起来了
展开
-
mysql-优化见解,理解很多遍这一版本应该是比较正确的
目前个人感觉,深入了解下mysql的引擎和索引,是如何工作,以及特性。就能满足咱们现在java工作了 我觉得主要的就是,innodb和myisam引擎,以及索引和数据存储的一些区别,在加上一些锁和事务。这些比较清晰后,一般的查询优化,在编写代码,操作数据库的时候,可能会有一些注意点 mysql5.1之前,默认引擎是myisam,5.5之后是innodbmyisam:表级锁,不支持事务,全文索引,不支持外键(不能创建外键约束)。 innod...原创 2021-11-26 17:52:31 · 576 阅读 · 0 评论 -
mysql-sql优化和分析(EXPLAIN)
sql分析 EXPLAIN SELECT * FROM employees原创 2021-06-16 18:05:32 · 183 阅读 · 0 评论 -
mysql-mvcc多版本控制
mvcc机制:主要是作用应对并发事务 仅inno DB引擎 支持。 在读已提交,和可重复读 两个隔离级别下工作原创 2021-06-11 14:33:02 · 273 阅读 · 1 评论 -
mysql-(事务,锁,隔离级别)
事务: 4个属性:原子性: 一致性: 隔离性: 持久性:原创 2021-06-09 19:56:18 · 94 阅读 · 0 评论 -
mysql-(B+Tree)(1)
mysql 中MyISAM与InnoDB 都是用B+Tree 数据结构存储数据。但是有区别 MyISAM:创建一个表,用MyISAM 引擎,会在存储磁盘生成三个文件my_table.frm -----> 表结构定义文件 my_table.MYD -----> 用于存放数据 my_table.MYI -----> 用于存放索引InnoDB :创建一个表,用InnoDB 引擎,会在存储磁盘生成两个文件 inno DB的 数据文件和索引文件是没有分开的 叶子节点存...原创 2021-06-08 17:46:46 · 78 阅读 · 0 评论 -
mysql join 语句执行解析
1:t1表的a1,t2表的a2,2:a1关联a22:t1 100条数据,t2 100条数据一 t1表是驱动表(驱动表全表扫描,设置驱动表 以数据小的表优先),如果a1加上索引,a2是主键查询的数据集是 100+100 (先把t1的表从磁盘读取内存,然后通过关联字段区去索引页查询,索引直接定位t2的数据所在的数据页,然后把t2的数据页读取到内存,然后把关联的数据,和t1进行累加...原创 2020-01-03 17:22:08 · 179 阅读 · 0 评论 -
mysql- 优化
一 数据类型优化 :在创建某个字段的时候,尽量选择该数据能存的最小数据类型,1、整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂,2、使用mysql自建类型而不是字符串来存储日期和时间3、用整型存储IP地址列:具体需要找类型优化varchar(1),int(1) ()varchar(5),varchar(255) (他们在硬盘存的大小一致,但是内存...原创 2019-12-30 17:27:53 · 231 阅读 · 0 评论 -
mysql 之 索引
索引匹配方式:如果设置的索引是 name,age,pos。1:全值匹配 全值匹配指的是和索引中的所有列进行匹配 explain select * from staffs where name = 'July' and age = '23' and pos = 'dev';2:匹配最左前缀 只匹配前面的几列(只能按照顺序索引,顺序必须是 name,ag...原创 2019-12-27 15:18:35 · 127 阅读 · 0 评论 -
mysql 之 执行计划
EXPLAIN SELECT * FROM `sjt_doctor` sd LEFT JOIN `sjt_doctor_bank_card` sb ON sb.`doctor_id`=sd.`id` WHERE sd.id=2501.添加PRIMARY KEY(主键索引)mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `c...原创 2019-12-27 11:46:43 · 508 阅读 · 0 评论 -
mysql之优化2
覆盖索引:比如select id,name from table where id="" , 查询的数据在索引页,不再需要再去数据页去查询,这样就减少了回表操作。1 : 如果我的索引是 NAME|age, 如果我只通过age查询,是不走索引的,因为必须先最左原则,先name,2 : 如果我的索引是 NAME3 : 如果 SELECT * FROM TABLE WH...原创 2019-12-17 17:39:14 · 122 阅读 · 0 评论 -
mysql-优化-数据类型
数据类型优化 :1-尽量使用可以做正确存储数据的最小数据类型(小的更快,占用更少的磁盘,内存和cpu缓存,如果无法判断存储值得数据范围,那就选择不超过范围的最小类型。2-整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂,使用mysql自建类型而不是字符串来存储日期和时间3-尽量避免null ,如果查询中包含可为NULL的列,对mysql来说很难优化,因为可为...原创 2019-12-11 17:59:48 · 100 阅读 · 0 评论 -
mysql之change buffer 分析
1: change buffer 只限于用在普通索引的场景下,而不适用于唯一索引。merge:将内存中的数据写入磁盘的过程普通索引的所有场景,使用 change buffer 都可以起到加速作用吗? 因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buff...原创 2019-11-28 15:11:07 · 290 阅读 · 0 评论 -
mysql-更新数据分析
更新数据:如果更新的数据在内存中1:唯一索引:判断唯一索引是否再存,不存在直接插入2:普通索引:找到位置直接从插入3:差别:唯一索引需要多判断一次,性能差距可以忽略如果更新的数据不再内存中1:唯一索引:需要将数据页读入内存中,在插入2:普通索引: 会记录在 change buffer 中3:差别:从磁盘读取数据页到内存 很消耗资源...原创 2019-11-28 15:06:23 · 130 阅读 · 0 评论 -
mysql之查询分析(InnoDB)
数据查询:1:将数据根据页为单位, 从磁盘读取到内存中,每页的大小是16kb2:根据条件查询,因为所需的数据页都在内存中, 对于普通索引来说,找到该记录,然后会再继续找一次,因为在内存操作所以消耗性能可以忽略。 对于唯一索引涞水,找到该记录就可以 差别:就是普通索引会多查询一次...原创 2019-11-28 14:31:53 · 218 阅读 · 0 评论 -
mysql-profile优化工具分析
通过profile分析一条sql 查看sql性能1:开启SET profiling = 1;2 : 编写sqlSELECT * FROM sjt_doctor WHERE mobile =11111111111;3:查看sql的语句分析SHOW PROFILES;4:查看sql1的具体分析模板:SHOW PROFILE (type)FOR QUERY id;S...原创 2019-11-20 12:00:51 · 177 阅读 · 0 评论 -
mysql-innoDB索引
InnoDB采用了 b+树形索引模型, 每一个索引在InnoDBde 里面对应一颗B+树,列子:我们有一个主键为ID的表,表中有字段k。并在k中有索引从图中不难看出,根据叶子节点的内容,索引类型分为主键索引和非主键索引。主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。非主键索引的叶子节点内容是主键的值。在 In...原创 2019-11-19 14:20:35 · 190 阅读 · 0 评论 -
mysql-事务
隔离性与隔离级别提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为...原创 2019-11-18 16:38:02 · 138 阅读 · 0 评论 -
mysql修改数据流程 redolog/binglog
1.修改数据,先从硬盘读数据到内存,然后修改这行数据,写如新行,更新到内存,然后写入redolog,成功后写入binglog,提交事务(提交的数据不会马上保存到硬盘中,如果你修改的数据还未保存到硬盘中,此时断电,重启,你的redolog保证你的数据不会丢失) 有个问题 因为redlong会存所有的记录 就算断电 binglog就够了, 还要 redlong干什么呢?...原创 2019-11-18 15:41:10 · 462 阅读 · 0 评论 -
mysql查询流程
mysql查询流程:mysql 分为两部分,其部分是server,一部分是存储引擎,当查询一条sql,1:连接器,客户端通过连接器,根据输入的账号密码进行连接。2:缓存,mysql5.8之前的版本是有缓存的,5:.8之后缓存功能取消,根据查询语句去缓存中去查询,如果命中,直接返回,否则,再去一步步通过存储引擎取出数据。3:分析器,如果你的查询语句没有命中缓存,就会执行分...原创 2019-11-15 17:06:30 · 388 阅读 · 0 评论