在DBMS中,查询的过程可以概括为给提交查询请求,然后SQL语句将会自动生成查询计划并执行,在这个过程中,我们关心的到的结果是多少,而不关心结果是怎么得到的,因此一个高效的查询处理手段显得尤为重要。
查询处理简介
数据库索引
什么是索引
数据库索引是数据库中经过排序的数据结构,用于协助完成快速查询、更新等功能。索引一般由B树或B+树实现,关于B树与B+树的详细内容请参考。这里只说区别及优缺点。
B与B+树区别
- B树每个节点都存储key和data,叶节点为null,不包含任何信息
- B+树所有叶子节点包含数据,以及指向下一个节点的指针;而非叶子节点可以视为索引部分
B+树优点
- 内部节点小,读写代价低
- 查询效率更加稳定
索引特点
- 索引由数据库管理系统自动维护并决定何时使用
- 索引不需要用户在查询语句中指定
- 定义主键或单一约束后会自动在相应列创建索引
- 用户可以按照自己的需求对制定单个字段或多个字段添加索引
索引优缺点
优点
- 加速检索
- 索引可以使查询过程使用优化隐藏器,提高系统性能
缺点
- 降低增删改速度
- 占用资源
聚集索引与非聚集索引
聚集索引表记录的排列顺序和索引的排列顺序一致,所以查询效率快;非聚集索引指定了表中记录的逻辑顺序,但是记录的物理和索引不一定一致。两者的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。
何时要/不要创建索引
需要创建索引 | 不需要创建索引 |
---|---|
表经常性进行SELECT操作 | 表经常性进行添加/删除或更新操作 |
表很大 | 表很小 |
列名经常出现在WHERE或JOIN条件中 | 列名不常出现在WHERE或JOIN条件中 |
查询预编译
查询预编译的过程包括两部分:语法分析与语义检查,从而生成一个合法的语法分析树。