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; +----+-…
DML和DDL的区别 DML(Data Manipulation Language)数据操纵语言,对数据库中的数据进行一些简单操作,如insert、delete、update、select等。DML操作是可以手动控制事务的开启、提交和回滚的。 DDL(Data Definition Language…
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存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。 在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主…
前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又是怎样的呢? 如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写: upda…
MySQL数据库作为优秀的关系型开源数据库,受到所有人的青睐,我们日常工作中,和其打交道的次数十分频繁,那么你知道我们在写sql的时候,MySQL内部是如何执行的吗?接下来我们就一起探讨一下吧。 MySQL 基本架构 以这条sql语句为例: select * from T where ID=10; …
撤销已经推送到远程的变更 场景 你已经执行git push,把你的修改推送到远程的仓库,现在你意识到之前推送的commit中有一个有些错误,想要撤销该commit。 方案 git revert <SHA> 原理 git revert 会创建一个新的commit,它和指定SHA对应的com…