神奇的 SQL 之 WHERE 条件的提取与应用
问题描述 一条 SQL 在数据库中是如何执行的呢 ?相信很多人都会对这个问题比较感兴趣。但是,感兴趣归感兴趣,你得去追呀,还臆想着她主动到你怀里来 ? 一条 SQL 在数据库中的生命周期涵盖了 SQL 的词法解析、语法解析、权限检查、查询优化、SQL执行等一系列的步骤,是一个相当复杂的过程,不亚于你追她的艰苦历程,不是只言片语就说的完的。但是,大家先别紧张,上面说的那些了,今天一个也不讲,气不气 ? 今天和大家一起来看一下 SQL 生命周期中比较有意思的一个环节 给定一条 SQL,如何提取其中的 where 条件 ? where 条件中的每个子条件,在 SQL 执行的过程中有分别起着什么样的作用 ? SQL 执行流程 这是 MySQL 数据库中 SQL 的执行流程,其他数据库应该类似 关系型数据库中的数据组织 关系型数据库中,数据组织涉及到两个最基本的结构:表与索引。表中存储的是完整数据记录,分为堆表和聚簇索引表;堆表中所有的记录无序存储,聚簇索引表中所有的记录则是按照记录主键进行排序存储。索引中存储的是完整记录的一个子集,用于加速记录的查询速度,索引的组织形式,一般均为B+树结构 MySQL 的 InnoDB 采用的是聚簇索引表,数据记录和索引是一起存储的,类似如下 InnoDB 二级索引(非聚簇索引)的结构与聚集索引的结构基本相同,只是叶子节点有些许差别