之前看到这篇文章T-SQL查询的逻辑工作原理,介绍select查询的执行步骤,但是我认为全表查询是对的,如果是索引查询,应该不是这样的,请问索引查询还有子查询的sql的执行顺序是怎么样的?如果还有其他情况的话,请麻烦一并介绍下,谢谢!
问题补充:
请看一下我给出的文章,我的问题来自该文章,谢谢
之前看到这篇文章T-SQL查询的逻辑工作原理,介绍select查询的执行步骤,但是我认为全表查询是对的,如果是索引查询,应该不是这样的,请问索引查询还有子查询的sql的执行顺序是怎么样的?如果还有其他情况的话,请麻烦一并介绍下,谢谢!
索引查询实际上就是要讨论索引的工作原理,排除特殊索引(比如bitmap),只说普通索引的话,用的都是"树"型结构,在主流数据库中SQL Server和MY SQL中用B+TREE,而ORACLE,INFORMIX,SYBASE用B-tree,DB2则用的是经过改造的B-tree结构..也就是说,这些就是普通索引的查询顺序...
以二叉树为例(注意,B+和B-都不是二叉的,只是用二叉树解释起来比较简单),假设你为一个表中叫id的字段创建索引,这个表一开始是个空表,那么索引也是空的,当你插入一条数据的时候,id字段对应的值以及指向这个id值所对应的行的指针(rowid)会同时存入一个树的节点中,第一次插入的当然就是根节点了.每一个节点就相当于一个索引页,也就是占了磁盘中的一块空间,
当你再插入一行数据,就会从跟节点延伸出子节点来存放新id和对应的指针,如果新id大于父节点中的id则被分到右边,就是右子树,小于则分到左边,就是左子树.之后同理..
当你通过索引进行查询时,系统会先根据where条件中的id范围,从根节点开始向下搜索,如果是B-tree结构的索引,那么找到所有包含所需要的ID的节点就停止了,如果是B+tree,便会一直找到叶子节点为止...
至于子查询,跟没有子查询的SQL是一样的,只是涵有子查询的SQL会先执行子查询再执行外层的查询.如果有索引,那么都有可能会被索引影响适应索引查询