MySQL自增主键解析
我们在创建表时一般都会创建自增的ID主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。那自增的主键是如何实现的呢? 为了便于说明,我们创建一个表 t,其中 id 是自增主键字段、c 是唯一索引,并添加点数据。 CREATE TABLE `single` ( `id…
MySQL 8.0.23新特性 – 不可见列
在MySQL 8.0.23之前,表中所有的列都是可见的(如果您有权限的话)。现在可以指定一个不可见的列,它将对查询隐藏。如果显式引用,它可以被查到。**** 创建表 CREATE TABLE `table1`( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` …
InnoDB 刷脏页的控制策略
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 第一种场景 是 InnoDB 的 redo log 写满了。这时候系统会停止所有更新操作,把 checkpoint 往前推进,redo log 留出空间可…
ORDER BY工作原理
MySQL中的 order by 是高频操作,并且对性能影响非常大,所以如果想要对排序有比较深的认知,并且对关键耗时排序进行优化,那么首先需要Mysql内部对于排序操作的实现原理。 在此之前需要对排序算法有比较深入的理解,排序算法种类非常多,但是项目工程中常用的是时间复杂度为 O(N*logN) 的…
普通索引和唯一索引
普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDERBY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)…
组合索引存储结构
MySQL的B+树索引在单列索引上比较好理解,结构如下: 那组合索引的B+树存储结构是什么样的呢,为什么会有最左前缀原理。 错误案例 原始表,Col1是主键。 对 col3 和 col2 建立 联合索引 正确案例 原始表 对 b c d 建立 联合索引 联合索引的查找方式 当我们的SQL语言可以应用…
索引失效
like失效 like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。表 city 字段设置有索引。 mysql> EXPLAIN SELECT * FROM `t` WHERE `city` LIKE '%州' LIMIT 0,1000; +----+-…
MySQL删除操作
DML和DDL的区别 DML(Data Manipulation Language)数据操纵语言,对数据库中的数据进行一些简单操作,如insert、delete、update、select等。DML操作是可以手动控制事务的开启、提交和回滚的。 DDL(Data Definition Language…
InnoDB重建表
MyISAM -rw-r----- 1 polkitd input 8556 Mar 26 11:08 test.frm // 存储表定义 -rw-r----- 1 polkitd input 0 Mar 26 11:08 test.MYD // 存储数据 -rw-r----- 1 polkitd …
InnoDB的存储结构
索引组织表 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。 在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主…