MySQL
MySQL应用与原理
程序员卡卡西
架构就是取舍
展开
-
MySQL——表结构设计
良好的数据库逻辑设计和物理设计是数据库获得高性能的基础。数据库设计的步骤:需求分析:全面了解产品设计的存储需求、数据处理需求、数据的安全性和完整性有什么样需求;逻辑设计:设计数据的逻辑存储结构,搞清楚数据实体之间的逻辑关系,解决数据冗余和数据维护异常;物理设计:根据所使用的数据库(Oracle、SQLServer、MySQL、Redis)特点进行表结构设计;维护优化:根据实际情况对索引、存储结构等进行优化。逻辑设计数据库逻辑设计一般按照的三范式进行设计:范式说明第一范原创 2020-08-10 17:11:14 · 707 阅读 · 0 评论 -
MySQL——SQL优化
如何定位并优化慢查询 SQL?大致思路如下:根据慢查询日志定位慢查询 SQL;使用 explain 等工具分析 SQL;修改 SQL 或者尽量让 SQL 走索引。SQL调优获取有性能问题的 SQL 的两种方法:通过慢查日志获取存在性能问题的 SQL;实时获取存在性能问题的 SQL;慢SQL定位1.根据慢查询日志定位慢查询 SQLMySQL 慢查询日志是一种性能开销比较低的解决方案,主要性能开销在磁盘 IO 和存储日志所需要的磁盘空间。对于磁盘 IO 来说,由于写日志是顺序存储,开原创 2020-08-09 06:17:05 · 297 阅读 · 0 评论 -
MySQL——高性能
MySQL高性能优化思路读写分离分库分表读写分离为什么要读写分离?写负载是不能够分担的,而且只能在主库上进行写操作。读操作主从上都可以。为了分担主库的读负载,就需要进行读写分离,写操作只能在主库上进行,而读操作尽量的在从库上完成。而完成读写分离后,对于读操作,如何分配多个服务器的读操作,这就需要我们进行读的负载均衡了。目前实现读写分离有两种方式:由程序实现读写分离;由中间件实现读写分离,例如 mysql-proxy(高并发下存在一定的问题)、maxScale(相对来说性能损耗小);原创 2020-08-08 11:50:32 · 168 阅读 · 0 评论 -
MySQL——高可用
高可用性(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。如何实现高可用?避免导致系统不可用的因素(服务器磁盘空间耗尽、性能糟糕的SQL、表结构和索引没有优化、主从数据不一致、人为的操作失误等等),减少系统不可用的时间;建立完善的监控及报警系统;定时的对备份数据进行恢复测试;对不需要的数据进行归档和清理;增加系统的冗余,保证发生系统不可用时可以尽快恢复;避免存储单点故障(单纯的主从复制架原创 2020-08-08 10:47:52 · 854 阅读 · 0 评论 -
MySQL——索引
为什么要使用索引?索引大大减少了存储引擎需要扫描的数据量。以 InnoDB 来说,发生一次 IO,最小的存储单位是以页为单位的,所以一页内存储的信息越多,那么读取效率也就越快,默认情况下,InnoDB 一页的大小为 16k,由于索引的大小比数据要小的多,所以一页内可以存储更多的索引,因此通过索引查找所需要读取的页非常少,减少了存储引擎需要扫描数据的数据量,加快了查找速度;数据行的物理地址通常是随机分布的,采用索引进行查找,可以把随机I/O变为顺序I/O,可以更加充分的发挥磁盘的 I/O 性能。BT原创 2020-08-08 10:44:44 · 154 阅读 · 0 评论 -
MySQL——锁
数据库锁按照锁的粒度划分,可分为表级锁、行级锁、页级锁;按照锁级别划分,可分为共享锁、排他锁;按照加锁方式划分,可分为自动锁、显式锁;按照操作划分,可分为DML 锁、DDL 锁;按照使用方式划分,可分为乐观锁、悲观锁。1、MyISAM 与 InnoDB 关于锁方面的区别是什么?MyISAM 默认用的是表级锁,不支持行级锁。对于 insert、update、delete,MyISAM 会自动加一个表级别的写锁 (排他锁);对于 select 会自动加一个表级别的读锁 (共享锁)。可以通过以下 SQL原创 2020-08-08 10:00:22 · 113 阅读 · 0 评论 -
MySQL——主从同步原理
如何避免 MySQL 单点故障?利用MySQL的主从复制来解决MySQL的单点问题;MySQL 主从同步,Master 必须启用 binlog,即二进制日志,binlog 记录了所有写操作的 SQL 语句,不记录任读操作。如果不开启 binlog 功能,则无法实现主从同步。binlog 存在三种日志格式:Statement:binlog 中存储 SQL 语句,存储日志量是最小的;Row:存储 event 数据,存储日志量大,但是不能很直接的进行读取;Mixed:介于 Row 和 State原创 2020-08-08 08:51:21 · 223 阅读 · 0 评论