
MySQL
服务端开发
这个作者很懒,什么都没留下…
展开
-
MySQL学习(一):MySQL的整体架构设计
概述MySQL作为一个数据存储系统,核心功能为存储数据和读取数据。在数据存储方面,MySQL是基于文件系统或者说是磁盘来进行数据保存的,即数据都是保存为磁盘上的一个个文件;在数据读取方面,MySQL作为一个关系型数据库,在应用代码中使用SQL语句来定义需要查找获取的数据。MySQL作为一个后台数据存储软件,也是采用C/S架构,基于TCP/IP进行通信的,所以应用代码需要进行数据存储时,需要通...原创 2019-03-09 16:37:31 · 5439 阅读 · 0 评论 -
MySQL学习(二):主从复制Replication的设计与实现
概念可拓展性和高可用MySQL主从复制主要用于数据读写分离的场景,即主库负责数据的写入,从库负责数据的读取,从而实现访问流量的分流,提高系统的整体负载能力。同时由于数据在主从节点都进行了冗余保存,避免了数据单点问题,提高了数据安全性。所以MySQL主从复制是可拓展性和高可用方面的一种实现方案。基本工作流程主从复制的基本工作过程为:主库处理所有的写请求,然后将该写请求异步复制给一台或多...原创 2019-03-09 23:33:00 · 2987 阅读 · 0 评论 -
MySQL学习(三):主从复制Replication实现高可用的架构模式
概述MySQL主从复制主要用于实现读写分离,所以主从架构一般为一主多从,即主库负责处理所有的写入请求,一个或多个从库负责处理所有的读请求,从而分散读写流量,实现读数据的高可用。除此之外,如果从库很多造成了主库复制负载太大,也可以考虑采用级联复制,即从库既作为主库的从库,也作为下一级从库的主库,从而降低主库的负载。以上架构都是针对读实现高可用,在主库写方面还是存在单点问题,故也可以基于MySQ...原创 2019-03-10 10:54:19 · 3073 阅读 · 0 评论 -
MySQL学习(四):分库分表的原理
概述一个数据库的演进过程通常为在起初数据量不大,使用单个数据库节点就可以支持业务的读写访问。随着系统用户量的增加,数据库存储的数据量也随之增加,这个时候通常可以通过提升数据库主机的硬件来提升处理能力。当提升硬件已经无法支撑访问量时,这个时候单台数据库同时处理读写请求会由于访问量过大而成为性能瓶颈。通常这个时候需要使用MySQL主从复制来实现读写分离,使用一个主库负责处理数据写请求,使用一个或...原创 2019-03-10 14:08:15 · 3702 阅读 · 0 评论 -
MySQL学习(五):Innodb存储引擎锁与MVCC机制的实现原理
概述锁的主要作用是在并发访问时,锁住所操作的数据表,数据页或者数据行,MySQL中不同的存储引擎存在差异,从而避免多个客户端对同一个数据进行操作,导致数据不一致现象的发生。锁根据是否需要对数据修改分为共享锁和排它锁,分记为S锁和X锁,其中S锁与S锁是共享的,S锁与X锁是互斥的,X锁与X锁也是互斥的,即数据读取SELECT操作使用共享锁,数据更新相关操作使用互斥锁。在MySQL当中,myis...原创 2019-04-07 12:17:18 · 6022 阅读 · 0 评论 -
MySQL学习(六):Innodb存储引擎的事务实现机制
概述事务机制主要用于实现数据库对并发访问的支持和在并发访问下的数据一致性和可靠性。MySQL的myisam存储引擎是不支持事务的,通过表锁来实现数据的可靠性,类似于Java多线程的同步锁synchronized,避免并发修改,但是并发性能较差,比较适合OLAP的应用,同时数据库奔溃恢复比较麻烦。innodb存储引擎是支持事务的,支持多个客户端高性能地进行并发操作,相对myisam并发性能较好...原创 2019-04-07 17:19:11 · 5009 阅读 · 0 评论 -
MySQL学习(七):Innodb存储引擎索引的实现原理
概述在数据库当中,索引就跟树的目录一样加快数据的查找速度,对于一个SQL查询操作,根据索引快速过滤掉不符合要求的数据并定位到符合要求的数据,从而不需要扫描整个表来获取所需的数据。在innodb存储引擎中,主要是基于B+树来实现索引,在非叶子节点存放索引关键字,在叶子节点存放数据记录或者执行数据记录的指针,所有的数据记录都在同一层,叶子节点,即数据记录直接之间通过指针相连,从而可以方便地遍历到...原创 2019-04-07 21:13:49 · 7814 阅读 · 1 评论 -
MySQL学习(八):SQL解析顺序与MySQL底层实现
SQL语句的核心元素SQL语句的核心组成如下:其他复杂查询,如子查询,UNION等也是基于这些元素来构成的,只是MySQL服务器对结果进行了处理。SELECT DISTINCT < select_list > FROM < left_table > < join_type >JOIN < right_table > O...原创 2019-03-27 00:39:14 · 3249 阅读 · 0 评论 -
MySQL学习(九):SQL查询语句的用法和优化
一、概述MySQL的性能优化可以从机器硬件,如磁盘,内存等;MySQL服务器配置,如线程数,查询缓存等;MySQL的主从分离和分库分表等;SQL语句优化等。其中SQL语句优化是与日常开发密切相关的,而且也是MySQL优化中最重要的一个环节,因为MySQL服务器,机器等的资源是一定的,故当出现性能瓶颈时,首先需要排除是否为SQL执行问题,如通过开启MySQL慢日志统计执行慢的SQL,或者使用p...原创 2019-04-14 23:38:44 · 2455 阅读 · 0 评论 -
SQL优化(一):MySQL多表查询FROM和JOIN的用法与性能优化
概述from和join均是用于指定需要从哪些表查询数据,from可以是一个表或多个表,如果是多个表则是生成一个笛卡尔集,会涉及到大量数据。所以通常在涉及到多个表的查询时,通常通过join来拼接多个表。join主要是通过多个表之间的外键关联来进行拼接,注意用于拼接的列需要加上索引,如果没有则MySQL也会默认加上,不过前提是外键列和引用的主键列需要是相同的数据类型,如数字类型需要是相同的...原创 2019-04-10 23:57:08 · 16230 阅读 · 1 评论 -
SQL优化(二):MySQL索引失效的六种场景与优化方法
概述以下基于用户订单表t_order和订单清单条目表t_order_item来分析,二者通过order_id来建立外键约束。mysql> show create table t_order;+---------+--------------------------------------------------------------------------------------...原创 2019-04-14 17:34:43 · 4115 阅读 · 0 评论 -
SQL优化(三):子查询和IN,EXISTS用法和优化方法
用法1. 与IN结合使用子查询与IN结合使用时,通常通过子查询查询出某个表单列的值,然后作为外层的SELECT的IN查询的数据源,如下,查询今天进行了购物的用户列表,首先通过子查询在订单表t_order查出所有今天进行了购物的用户的user_id,然后在外层SELECT中对于用户表t_user的每个用户都通过IN来判断自己的user_id是否在里面:mysql> select * ...原创 2019-04-14 22:53:38 · 6583 阅读 · 0 评论 -
SQL优化(四):explain命令详解:SQL性能分析利器
explain命令的使用很简单,主要用于对SELECT语句的执行情况进行分析,示例如下:mysql> EXPLAIN SELECT DISTINCT(trade_date) FROM order WHERE user_id=1 ORDER BY trade_date DESC LIMIT 10;+----+-------------+-------------------+-----...原创 2019-03-26 15:44:15 · 6357 阅读 · 0 评论 -
MySQL权限控制
概述身份认证模块,即MySQL客户端通过指定用户名,密码,主机名来连接MySQL服务器,主要是认证给定的用户是否有权限连接MySQL服务器,而权限控制模块主要用于控制已经通过身份认证的用户对数据库、数据库表、数据表的列的访问权限。针对数据库,数据表和数据表的列的访问控制主要在mysql数据库的user表进行定义,如下是user表的完整字段集合:| Host | User | Se...原创 2019-03-09 14:30:24 · 3674 阅读 · 0 评论 -
MySQL二进制日志binlog的设计与实现
概述MySQL为了实现数据的安全性和故障可恢复性(MySQL自身故障导致或者主机断电之类导致MySQL服务器异常退出的场景,对于主机磁盘损坏之类的故障无法恢复),对于数据的所有增删改操作在对相应的数据表进行写入之前,支持先记录到一个二进制日志中,即支持Write log ahead策略,然后在进行数据文件的写入操作。对于事务操作,每个事务操作提交之前,也会先将事务内的修改操作记录到二进...原创 2019-03-09 22:00:31 · 3260 阅读 · 0 评论 -
MySQL面试题:主从复制binlog延迟太多怎么办
概述之前在网上看到有人分享面试经验:binlog复制延迟太多怎么办,对于这个问题在工作当中也是很常见的一个问题。之前分析过,MySQL基于二进制日志binlog实现的主从复制是一种异步复制,即主库对于数据库修改操作,首先记录到binlog然后在修改数据库文件。主库的复制线程读取binlog然后传输给从库,从库的复制线程接收保存为relay log,然后再由SQL线程读取relay log并在...原创 2019-03-09 22:59:42 · 8641 阅读 · 1 评论