MySQL
文章平均质量分 95
无心六神通
金融科技系统架构师
展开
-
MySQL-隐式转换-造成索引失效
数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性。在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很小的疏忽造成的,又或者是因为不了解某个技术特性产生的。于数据库层面,最常见的恐怕就是索引失效了,且一开始因为数据量小还不易被发现。但随着业务的拓展数据量的提升,性能问题慢慢的就体现出来了,处理不及时还很容易造成雪球效应,最终导致数据库卡死甚至瘫痪。原创 2024-02-10 18:53:05 · 764 阅读 · 0 评论 -
MySQL-时间类型数据-存储建议
MySQL 中时间到底怎么存储才好?Datetime?Timestamp?数值保存的时间戳?好像并没有一个银弹,很多程序员会觉得数值型时间戳是真的好,效率又高还各种兼容,但是很多人又觉得它表现的不够直观。这里插一嘴,《高性能 MySQL 》这本神书的作者就是推荐 Timestamp,原因是数值表示时间不够直观。下面是原文:每种方式都有各自的优势,根据实际场景才是王道。原创 2024-02-10 18:52:22 · 809 阅读 · 0 评论 -
MySQL-自增主键-连续性
作者:飞天小牛肉原文:https://mp.weixin.qq.com/s/qci10h9rJx_COZbHV3aygQ众所周知,自增主键可以让聚集索引尽量地保持递增顺序插入,避免了随机查询,从而提高了查询效率。但实际上,MySQL 的自增主键并不能保证一定是连续递增的。原创 2024-02-10 18:51:29 · 918 阅读 · 0 评论 -
MySQL-执行计划-分析
执行计划是指一条 SQL 语句在经过MySQL 查询优化器的优化会后,具体的执行方式。执行计划通常用于 SQL 性能分析、优化等场景。通过EXPLAIN的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。原创 2024-02-10 18:50:13 · 837 阅读 · 0 评论 -
MySQL-SQL语句-执行过程
MySQL 主要分为 Server 层和引擎层,Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,同时还有一个日志模块(binlog),这个日志模块所有执行引擎都可以共用,redolog 只有 InnoDB 有。引擎层是插件式的,目前主要包括,MyISAM,InnoDB,Memory 等。查询语句的执行流程如下:权限校验(如果命中缓存)--->查询缓存--->分析器--->优化器--->权限校验--->执行器--->引擎。原创 2024-02-10 18:49:05 · 773 阅读 · 0 评论 -
InnoDB-存储引擎-MVCC-实现
对于 一致性非锁定读(Consistent Nonlocking Reads) open in new window的实现,通常做法是加一个版本号或者时间戳字段,在更新数据的同时版本号 + 1 或者更新时间戳。查询时,将当前可见的版本号与对应记录的版本号进行比对,如果记录的版本小于可见版本,则表示该记录可见在 存储引擎中,多版本控制 (multi versioning)open in new window 就是对非锁定读的实现。如果读取的行正在执行 或 操作,这时读取操作不会去等待行上锁的释放。相反地原创 2024-02-09 09:21:27 · 762 阅读 · 0 评论 -
MySQL-事务隔离级别-详解
READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。SERIALIZABLE(可串行化): 最高的隔离级别,完全服从 ACID 的隔离级别。原创 2024-02-09 09:18:17 · 844 阅读 · 0 评论 -
MySQL-三大日志详解
MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志binlog(归档日志)和事务日志redo log(重做日志)和undo log(回滚日志)。今天就来聊聊redo log(重做日志)、binlog(归档日志)、两阶段提交、undo log(回滚日志)。这部分内容为 JavaGuide 的补充:MySQL InnoDB 引擎使用redo log(重做日志)保证事务的持久性,使用undo log(回滚日志)来保证事务的原子性。MySQL。原创 2024-02-09 09:17:46 · 798 阅读 · 0 评论 -
MySQL-索引详解
索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。原创 2024-02-09 09:16:59 · 808 阅读 · 0 评论 -
MySQL-高性能优化-规范-建议-总结
除非有特别的原因使用 NULL 值,应该总是让字段保持 NOT NULL。索引 NULL 列需要额外的空间来保存,所以要占用更多的空间;进行比较和计算时要对 NULL 值做特别的处理。技术分享 | MySQL 默认值选型(是空,还是 NULL)open in new window。原创 2024-02-09 09:16:07 · 778 阅读 · 0 评论