理解mysql
毛志荣
推崇用最朴实的语言进行技术传播
展开
-
理解mysql_如何优雅的设计表结构
数据存储的重要性大家都知道,在此就没必要去强调了。 那么如何将软件运行的这些数据有效合理的存储起来呢? 在设计时可以参考如下几点: 1、表结构的设计优先考虑遵循3范式 为什么要遵循第3范式? 遵循第3范式的设计可以使数据存储简洁、清晰、数据不会有冗余的情况。 3范式的基本原则: a. 字段必须不可再分割...原创 2017-07-17 21:50:48 · 219 阅读 · 0 评论 -
理解mysql_order by排序原理及优化
一、排序算法 a. 一次扫描性能高,减少了io随机请求的次数 b. 排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取 c. 关联查询会产生临时表再进行order by二、优化思路 a. 尽量减少io的读取 max_lengt...原创 2017-07-20 09:38:17 · 229 阅读 · 0 评论 -
理解mysql_简述mvcc
Mvcc其实并不是真正意义上实现的乐观锁。mysql只是用它来解决事务隔离级别中的不可重复读的问题。当事务T1 开启后, 需要修改某行, 会先给该行加上排他锁, 并且生成一个版本。此时,事务T2进入,读取的记录永远是事务T1提交前的一个版本。避免了2次读的记录不一致的情况。...原创 2017-07-20 09:38:05 · 297 阅读 · 0 评论 -
理解mysql_limit优化思路
Limit 是将所有记录查询出来进行范围限制输入。 会导致前面不需要的记录也进行io读取。优化整体思路就是尽可能少操作io, 常用手段: 1、使用记录主键的方式进行优化 如: select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10; 2、使用子查...原创 2017-07-19 09:39:21 · 90 阅读 · 0 评论 -
理解mysql_锁的概念
对于锁需要重点掌握以下: 1. 锁分类 ● 表锁 ● 行锁 ● 对象锁(meta-table锁),在table cache层实现 ● 页锁 ● 排他锁(互斥锁、X锁) ● 共享锁(S锁)2.锁的使用注意事项 ● innodb引擎是行级锁,适用于高并发场景的后台系统 ● myisam引擎采用的是表级锁,适用于前端web系统 ● 执...原创 2017-07-19 09:39:12 · 93 阅读 · 0 评论 -
理解mysql_数据类型
bigint: 9223372036854775807 20位 2^63-1int: 2147483647 10位 2^32-1smallint : 32767 5位 2^16-1tinyint: 128原创 2017-07-19 09:38:43 · 90 阅读 · 0 评论 -
理解mysql_mybatis字段映射表
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.Big...原创 2017-07-19 09:33:38 · 169 阅读 · 0 评论 -
理解mysql_mysql主从原理及配置
实现原理: mysql的主从同步主要是通过bin-log来实现, 它是数据库服务器来控制的而非存储引擎控制,大概思路是master服务器从log buffer刷新磁盘的同时生成一个bin-log文件,通过socket消息发送给slave,slave执行完毕后(有可能是失败,也有可能是成功)向master报告一个消息, master根据情况判断是否commit还是roll...原创 2017-07-19 09:33:30 · 114 阅读 · 0 评论 -
理解mysql_事务的隔离级别
我们经常会出现A事务未交更改,B事务就能看到, 或者B 事务执行2次相同sql但查询的结果不一致,遇到这种情况可以通过设置不同的事务隔离级别来解决。 mysql有四种隔离级别: ● read-uncommited(读-不需要提交): set tx_isolation='READ-UNCOMMITTED'; 在2个事务同时进行过程中,A事务做过数据更...原创 2017-07-18 22:20:59 · 99 阅读 · 0 评论 -
理解mysql_事务原理及常见优化思路
WAL机制, 先采用日志的方式将操作记录下来,然后刷新磁盘。 InnoDB遵循WAL协议,在日志持久化到磁盘之后,才会将日志对应的脏页刷 回磁盘;InnoDB内存中,DML操作顺序如下: – 写Undo(获取ROLLBACK_PTR系统列) – 修改Page – 写Redo的顺序不同的Update语句,写的日志量有较大差异(三种Update Cas...原创 2017-07-18 22:20:01 · 141 阅读 · 0 评论 -
理解mysql_索引的原理及优化技巧
innodb的索引: ● innodb采用索引组织数据的形式,它是在存储引擎层面实现的,与后端的服务器层没有关联。不同的存储引擎有不同的实现算法。 ● 索引的原理 索引采用b tree(平衡树)树的形式保存,所以是有顺序的。 索引的数据存储在表空间(tablespace)里面, 聚集索引(主键索引)上...原创 2017-07-18 22:18:15 · 82 阅读 · 0 评论 -
理解mysql_批量执行的性能优化
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。 只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱...原创 2017-07-18 22:16:35 · 163 阅读 · 0 评论 -
理解mysql_分库分表的一些认识
垂直切分: 垂直分表: 将原有表中的字段拆分成多个表 垂直分库: 微服务中盛行, 每个业务子系统有自己独立的数据库。 好处:结构清晰 缺点:增加系统复杂度,需要各个系统对外暴露接口。 水平切分: 水平分表: 表结构一致。 将原有记录按一定规律拆分到多个相同结构的表里面去。通常...原创 2017-07-17 21:57:05 · 212 阅读 · 0 评论 -
理解mysql_序言
可以说, 不懂mysql基础原理和简单优化思路的程序员算不上一名合格的程序, 因为你不懂这些技术,你就很难开发出高效能的代码出来。 也接触过很多开发人员,他们的重心大多数数还集中在程序代码这个层面,对数据库层面的东西知之甚少。 为了帮助广大技术同行,使他们的专业技能体系能够更加完善,决定从开发的角度,完整性的将mysq核心技术点进行总结梳理, 旨在 大概内容包括: 1、如何...原创 2017-07-17 21:55:09 · 96 阅读 · 0 评论 -
理解mysql_常用经典sql
1、允许mysql远程连接 同4 3、查看字符集设置 show variables like 'character%'; 4、数据库赋权 grant all on *.* to 'root'@'%' identified by 'Reset123QWE'; flush privileges; ...原创 2017-07-20 09:43:22 · 118 阅读 · 0 评论