mysql
文章平均质量分 78
我就是我,不一样的烟火
这个作者很懒,什么都没留下…
展开
-
全局锁、表锁、行锁
全局锁 全局锁的典型使用场景是,做全库逻辑备份 历史做法:flush table with read lock;确保不会有其他线程对数据库做更新,然后对整个库做备份。 mysql> flush table with read lock; Query OK, 0 rows affected (0.10 sec) mysql> select * from t; +----+------+------+ | id | c | d | +----+------+------+ | 0 |原创 2022-01-04 23:20:18 · 1241 阅读 · 2 评论 -
普通、唯一索引的选择与实践
唯一索引,普通索引选择 查询过程(微乎其微影响) 假设维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号: select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz'; 可以给id_card上面加索引,身份证号字段比较大,不建议你把身份证号当做主键。(非主键索引会存储主键索引的值,因此推荐选用短字段当主键索引) 对于普通索引来说,会多一次判断,需要查找下一个记录判断是否也满足匹配条件,不满足则终止扫原创 2022-01-02 15:41:12 · 591 阅读 · 0 评论 -
深入浅出MySql索引
索引的作用 提高数据查询效率 索引的常见模型 可以用于提高读写效率的数据结构很多,这里三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树 哈希表 键 - 值(key - value) 的形式,哈希思路:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。 哈希冲突的处理办法:链表 哈希表适用场景: 只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。 有序数组 按顺序存储。查询用二分法就可以快速查询,时间复杂度是:O(lo原创 2022-01-02 14:50:35 · 1247 阅读 · 0 评论 -
Mysql日志系统
redo log MySQL的的更新操作不会每次都写入磁盘,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程IO成本、查找成本都很高。 类似使用酒店掌柜粉板的思路来提升效率。(先写粉板,不忙时候再写账本) WAL是什么? Write-Ahead Logging,它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。 InnoDB引擎就会先把记录写到redo log(粉板)里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,原创 2021-12-25 18:44:07 · 672 阅读 · 0 评论 -
SQL查询执行流程
mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在MySQL内部的执行过程。 MySQL 基本架构 MySQL可以分为Server层和存储引擎层两部分 Server层 包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等 存储引擎 负责数据的存储和提取。其架构模式是插件式原创 2021-12-25 17:41:59 · 478 阅读 · 0 评论 -
mac 开启mysql bin-log
vim /usr/local/etc/my.cnf 添加以下配置 expire_logs_days = 5 定期清理 log-bin = /usr/local/var/mysql/mysql_bin_log/mysql-bin #开启binlog,指定文件闻之 server_id = 1 #配置mysql replication需要定义,不能和canal的slaveId重复 binlog_fo...原创 2020-04-23 19:25:00 · 74 阅读 · 0 评论 -
数据库 ACID
在交易系统中,有了数据库的事务机制,只要确保每一笔交易都在事务中执行,我们的账户系统就很容易保证流水和余额数据的一致性。但是,ACID 是一个非常严格的定义,或者说是理想的情况。如果要完全满足 ACID,一个数据库的所有事务和 SQL 都只能串行执行,这个性能肯定是不能满足一般系统的要求的。 对账户系统和其他大多数交易系统来说,事务的原子性和持久性是必须要保证的,否则就失去了使用事务的意义,而一致...原创 2020-05-03 17:30:36 · 401 阅读 · 0 评论 -
数据库操作回顾
sql database基本指令 #查看数据库版本 select version(); #查看当前时间 select now() #创建表 create database xxx charset utf8; #使用表 use xxx #删除表 drop database xxx; #创建表语句 show create database xxx; #显示所有表 show databases sql...原创 2019-03-24 15:05:00 · 51 阅读 · 0 评论 -
Mysql隔离级别
在交易系统中,有了数据库的事务机制,只要确保每一笔交易都在事务中执行,我们的账户系统就很容易保证流水和余额数据的一致性。但是,ACID 是一个非常严格的定义,或者说是理想的情况。如果要完全满足 ACID,一个数据库的所有事务和 SQL 都只能串行执行,这个性能肯定是不能满足一般系统的要求的。 对账户系统和其他大多数交易系统来说,事务的原子性和持久性是必须要保证的,否则就失去了使用事务的意义,而一...原创 2020-05-03 17:34:00 · 65 阅读 · 0 评论 -
MySQL to Redis同步
方式1:使用MQ 对于此类业务,增加一个消费订阅基本没什么成本,服务本身也不需要做任何更改。唯一需要担心的一个问题是丢消息的情况?因为现在消息是缓存数据的唯一来源,一旦出现丢消息,缓存里缺失的那条数据永远不会被补上。 MQ 集群,像 Kafka 或者 RocketMQ,它都有高可用和高可靠的保证机制,可以满足数据可靠性要求的。 方式2:使用 Binlog 实时更新 Redis 缓存 数据更新服务...原创 2020-05-04 00:15:43 · 295 阅读 · 0 评论 -
怎么避免写出慢 SQL
在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍、几十倍甚至几百倍。 怎样才能在开发阶段尽量避免写出慢 SQL 呢? 估算数据量 慢 SQL 对数据库的影响,是一个量变到质变的过程,对“量”的把握,就很重要。编写一条查询语句的时候,可以依据你要查询数据表的数据总量,估算一下这条查询大致需要遍历多少行数据。 使用索引 使用索引可以有效地减少执行查询时遍历数据的行数,提...原创 2020-05-03 18:12:33 · 338 阅读 · 0 评论 -
数据库操作简单回顾
sql database基本指令 #查看数据库版本 select version(); #查看当前时间 select now() #创建表 create database xxx charset utf8; #使用表 use xxx #删除表 drop database xxx; #创建表语句 show create database xxx; #显示所有表 show databases sql...原创 2019-03-24 15:02:18 · 114 阅读 · 0 评论