
MySQL
文章平均质量分 92
MySQL基本使用及优化
他叫阿来
这个作者很懒,什么都没留下…
展开
-
MySQL集群架构
在集群架构设计时,主要遵从下面三个维度- 可用性- 扩展性- 一致性**可用性设计**- 站点高可用,冗余站点- 服务高可用,冗余服务- 数据高可用,冗余数据原创 2024-05-19 09:40:43 · 1095 阅读 · 0 评论 -
MySQL性能优化
数据库优化维度有4个:硬件升级、系统配置、表结构设计、SQL语句及索引。原创 2024-05-18 08:31:38 · 880 阅读 · 0 评论 -
插入死锁例子(二)
我们执行以下插入语句时,会在插入间隙上获取插入意向锁,而插入意向锁与间隙锁是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。而间隙锁与间隙锁之间是兼容的,所以两个事务中 select ... for update 语句并不会相互影响。原创 2024-05-10 15:44:15 · 666 阅读 · 0 评论 -
插入死锁案例(一)
如何尽量避免死锁发生1)不同的应用访问同一组表时,应尽量约定以相同的顺序访问各组表。对一个表而言,应尽量以固定的顺序存取表中的信息。这点真的很重要,它可以明显的减少死锁的发生。2)在主键等值更新的时候,尽量先查询看数据库中有没有满足条件的数据,如果不存在就不用更新,存在才更新。为什么要这么做呢,因为如果去更新一条数据库不存在的数据,一样会产生间隙锁。举例:如果表中只有id=1和id=5的数据,那么如果你更新id=3的sql,因为这条记录表中不存在,那就会产生一个(1,5)的间隙锁,但其实这个锁就是多余原创 2024-05-10 15:20:44 · 546 阅读 · 0 评论 -
MySQL线上死锁案例分析
生产环境mysql死锁排查原创 2023-12-13 17:38:32 · 1514 阅读 · 2 评论 -
InnoDB的B+树索引(一)
回到我们最开始的问题,一条记录在 ``B+树``中是如何进行查找的?只要分为两大步骤:1. 找到该条记录所在的`页` - 从根节点出发,通过c1的值跟根页面中的目录项中的主键值进行比较,确认下一层级**内节点**的页号 - 在内节点中再次比较主键值 - 重复步骤2,直到找到叶子节点2. 在叶子节点中找到该条记录 - 通过二分法确定该记录所在的槽。 - 通过记录的next_record属性遍历该槽所在的组中的各个记录。假设所有存放用户记录的叶子节点数据页可以存放100条用户记录,存放目录项记原创 2023-12-04 11:43:42 · 1372 阅读 · 0 评论 -
InnoDB存储引擎中的锁
如果事务之间涉及到相同的数据项时,会使用排他锁,或叫互斥锁,先进入的事务独占数据项以后,其他事务被阻塞,等待前面的事务释放锁。上面的查询操作,对account表中的id = 1的记录增加了共享锁,其他事务依然可以查到该账户的余额,但是不能对账户余额进行修改,在某种场景下能够满足业务的需求。规定事务在等待的时候也需要在内存中生成一个锁结构,表明有事务想在某个间隙中插入新记录,但是现在在等待。,写操作针对的是最新版本的记录,读记录的历史版本和改动记录的最新版本本身并不冲突,也就是采用。原创 2023-11-29 18:05:36 · 963 阅读 · 0 评论 -
MySQL的undo log 与MVCC
MVCC(Multi Version Concurrency Control)被称为多版本控制,是指在数据库中为了实现高并发的数据访问,对数据进行多版本处理,并通过版本链保证事务能看到自己应该看到的数据版本。InnoDB 的**行数据有多个版本**,每个数据版本有自己的 row trx_id,每个事务或者语句有自己的一致性视图。普通查询语句是一致性读(快照读),一致性读会根据 row trx_id 和一致性视图确定数据版本的可见性。原创 2023-11-27 08:01:25 · 2092 阅读 · 2 评论 -
MySQL的Redo Log跟Binlog
Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,也有很多相似之处,本文主要介绍两者细节和区别原创 2023-11-23 19:43:49 · 1199 阅读 · 0 评论 -
MySQL锁
MyISAM表锁InnoDB的事务ACID属性InnoDB行级锁:共享锁与排他锁InnoDB行级锁使用过程的注意事项原创 2021-02-21 11:19:29 · 305 阅读 · 0 评论 -
MySQL日志
MySQL错误日志配置与查看MySQL二进制日志配置与查看MySQL查询日志配置与查看MySQL慢查询日志配置与查看原创 2021-02-19 16:18:35 · 207 阅读 · 0 评论 -
MySQL权限管理
mysql创建账号mysql赋予、更改账号权限mysql修改用户密码mysql删除用户原创 2021-02-19 09:38:52 · 933 阅读 · 0 评论 -
MySQL视图
文章目录前言一、什么是视图二、视图操作1.创建、修改视图2.删除视图3.查看视图总结前言本文对视图的基本使用进行介绍,案例文件从sakila下载。一、什么是视图视图是一种虚拟的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表。并且在使用视图时动态生成。视图相对普通的表的优势有以下几项:简单:使用视图不需要关心表结构、关联条件和筛选条件。对用户来说已经是过滤好的复合条件的结果集。安全:可以用视图来限制用户只能看到某张表中哪些字段(单纯通过表权限无法做到)数据独立:一原创 2021-02-18 17:49:08 · 177 阅读 · 0 评论 -
SQL分析与优化
文章目录前言一、SQL常用分析方法1.查看SQL执行频率2.定位低效率执行SQL3.使用EXPLAIN分析SQL4.show profile分析SQL二、避免索引失效三、SQL优化1.大批量插入数据2.优化insert3.优化order by4.优化group by5.优化嵌套查询6.优化or查询7.优化分页查询总结前言当面临慢查询SQL时,应如何快速定位与解决问题。本篇主要介绍在实际开发过程中如何分析SQL并对SQL进行优化。数据文件从案例库sakila下载一、SQL常用分析方法1.查看SQL原创 2021-02-18 10:54:53 · 227 阅读 · 0 评论 -
MySQL索引设计与EXPLAIN
文章目录前言一、索引设计原则二、索引的使用1.主键索引2.联合索引三、EXPLAIN总结前言一、索引设计原则索引的设计可以遵守一些原则,创建索引时可以尽可能考虑这些原则,便于提升索引的使用效率。最适合索引的列是出现在WHERE子句中的列,或链接子句中的列,而不是出现在SELECT关键字后选择类表中的列。使用唯一索引。区分度越高,使用索引的效率越高使用短索引;例如有一个CHAR(200)列,如果前10或者20个字符内,多数值是唯一的,那么就不要对整个列进行索引。对前10个或者20个字符进行索原创 2021-02-17 15:39:04 · 480 阅读 · 1 评论 -
MySQL索引介绍
文章目录前言一、概述1.基本语法2.索引分类二、索引结构1.BTREE结构2.B+TREE结构3.MySQL的B+TREE三、MySQL索引实现1.MySQL索引为什么要使B+TREE2.MyISAM索引实现3.InnoDB索引实现总结前言本文主要介绍MySQL索引相关知识。在此基础上,下一篇介绍该如何使用索引并对SQL进行优化。一、概述MySQL索引官方定义:索引(index)是帮助MySQL高效获取数据的数据结构(有序),通过这种数据结构可以实现高效查找。索引优势:提高检索效率,降低IO原创 2021-02-16 19:06:47 · 163 阅读 · 0 评论 -
MySQL常用函数总结
文章目录前言一、字符串函数二、数值函数三、日期和时间函数四、流程函数五、其他常用函数总结前言本篇主要总结MySQL常用函数,并配合一些实例展示具体用法一、字符串函数函数功能描述CONCAT(S1,S2…Sn)连接S1,S2…SN为一个字符串INSERT(str,x,y,instr)将字符串str从位置x开始,y个字符长的子串替换为字符串instrLOWER(str)转换为小写UPPER(str)转换位大写LEFT(str,x)返回str最左边原创 2021-02-16 12:27:00 · 139 阅读 · 0 评论 -
MySQL选择合适的数据类型
文章目录前言一、数值类型二、1.引入库2.读入数据总结前言本篇主要介绍MySQL常用的数据类型,并总结了在创建表时应该如何选择数据类型的一些原则。一、数值类型所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项。它的取值方位是正常值是下限取0,上限是原来的上限的2倍actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,整数类型类型字节最小值最大值T原创 2021-02-16 09:06:54 · 354 阅读 · 1 评论 -
MySQL常用DDL语法总结
文章目录前言一、DDL语句简述二、数据库操作三、表操作总结前言本篇主要总结MySQL的数据库操作,表操作方面的常用DDL(Data Definition Language)语句。一、DDL语句简述DDL是数据定义语言的缩写,简单来说就是对数据库内部的对象进行创建、删除、修改等操作的语句。它和DML(Data Manipulation Language)语句最大的区别是DML只是对表内部的数据进行操作,而不涉及表的定义、结构的修改。二、数据库操作-- 创建数据库create database原创 2021-02-13 12:33:56 · 7989 阅读 · 1 评论