高性能MySQL
文章平均质量分 97
高性能MySQL:包括但不限于MySQL底层原理详解、数据库分库分表、SQL优化等
邋遢的流浪剑客
成长中的基础架构攻城狮
展开
-
Sharding-Jdbc实现读写分离、分库分表
1、概览ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架2、MySQL主从复制1)、docker配置mysql主从复制1)创建主服务器所需目录mkdir -p /usr/local/mysqlData/master/cnfmkdir -p /usr/local/mysqlData/master/data2)定义主服务器配置文件原创 2021-03-27 14:46:08 · 2453 阅读 · 2 评论 -
MySQL复习(二):MySQL锁、MySQL事务、SQL优化、数据库分库分表
五、MySQL锁根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类1、全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的...原创 2020-01-27 10:37:25 · 1964 阅读 · 0 评论 -
MySQL复习(一):MySQL基础架构、InnoDB体系架构、MySQL日志、MySQL索引
一、MySQL基础架构MySQL可以分为Server层和存储引擎层两部分Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个...原创 2020-01-27 10:28:28 · 5389 阅读 · 0 评论 -
MySQL知识点补充(不同count()的用法、union执行流程、group by语句)
一、MySQL中不同count()的用法count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值1.对于count(主键id)来说,InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断是不可能为空的,就按行累加2.对于count(1)来说,InnoDB引擎...原创 2019-06-07 15:51:17 · 1553 阅读 · 0 评论 -
MySQL主备、主从、读写分离详解
一、MySQL主备的基本原理在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。当需要切换的时候,就切成状态2。这时候客户端读写访问的都是节点B,而节点A是B的备库在状态1中,虽然节点B没有被直接访问,但是建议把备库节点B,设置成只读模式。有以下几个原因:1.有时候一些运营类的查询语句会被放到备库上去查,...原创 2020-02-28 16:58:17 · 75085 阅读 · 17 评论 -
MySQL锁详解
根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类一、全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句全局锁的......原创 2019-06-05 16:28:50 · 95210 阅读 · 51 评论 -
MySQL事务隔离详解
事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务一、事务的特性原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样一致性:在事务开始之前和事务结束...原创 2019-06-04 19:36:46 · 428 阅读 · 0 评论 -
MySQL join语句算法及优化详解
一、join语句算法创建两个表t1和t2CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`)) ENGINE=InnoDB;CREATE DEFINER=`root`...原创 2019-06-04 17:21:01 · 1331 阅读 · 0 评论 -
InnoDB buffer pool详解
在WAL机制中,InnoDB内存的一个作用是保存更新的结果,再配合redo log,避免了随机写盘。内存的数据页是在Buffer Pool中管理的,在WAL里Buffer Pool起到了加速更新的作用由于有WAL机制,当事务提交的时候,磁盘上的数据页是旧的,如果这时候马上有一个查询要来读这个数据页,不需要马上把redo log应用到数据页。因为内存数据页的结果是最新的,直接读内存就可以了。Buf...原创 2019-06-04 09:03:08 · 837 阅读 · 1 评论 -
MySQL基础架构与日志详解
一、MySQL基础架构MySQL可以分为Server层和存储引擎层两部分Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等存储引擎负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存...原创 2019-06-03 20:18:23 · 1075 阅读 · 0 评论 -
MySQL自增主键详解
一、自增值保存在哪儿?不同的引擎对于自增值的保存策略不同1.MyISAM引擎的自增值保存在数据文件中2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值select max(ai_col) from table_name for ...原创 2019-06-02 10:02:16 · 208452 阅读 · 8 评论 -
MySQL索引详解
一、InnoDB的索引模型在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。InnoDB使用了B+树索引模型,所以数据都是存储在B+树中的。每一个索引在InnoDB里面对应一棵B+树有一个主键列为ID的表(表1),表中有字段k,并且在k上有索引。这个表的建表语句如下:create table T(id int primary key, k int n...原创 2019-06-02 10:00:58 · 1121 阅读 · 0 评论 -
数据库分库分表
一、业务分库业务分库指的是按照业务模块将数据分散到不同的数据库服务器。例如,一个简单的电商网站,包括用户、商品、订单三个业务模块,我们可以将用户数据、商品数据、订单数据分开放到三台不同的数据库服务器上,而不是将所有数据都放在一台数据库服务器上业务分库能够分散存储和访问压力,但也带来了新的问题1)join操作问题业务分库后,原本在同一个数据库中的表分散到不同数据库中,导致无法使用SQL的j...原创 2019-05-19 19:06:09 · 469 阅读 · 0 评论 -
在一个千万级的数据库查询中,如何提高查询效率?
一、数据库设计方面1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引;2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: selec...转载 2019-09-06 11:09:48 · 1724 阅读 · 0 评论