欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

查询除了一列意外_想让你的查询语句变快吗?

发布时间:2024/1/23 编程问答 67 豆豆
生活随笔 收集整理的这篇文章主要介绍了 查询除了一列意外_想让你的查询语句变快吗? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

蒋蒋~大家吼啊 相信大家都遇到过查询语句龟速的情况,那心情,那酸爽

大家别怕,我们有索引这个东西

索引:索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

而索引也有很多种类的

索引分类

逻辑:单行索引、多行索引、唯一索引、非唯一索引、函数索引

物理:分区索引、非分区索引、B-tree索引、bitmap索引

B-tree索引

它的存储结构类似于书的目录索引结构,有分支节点和叶子节点,分支节点相当于书的大目录,叶子节点相当于具体到页的索引。

优点:适合高基数的列(唯一值多),适合与大量的增、删、改(OLTP)。

缺点:不适合键值重复率较高的字段上使用。

Bitmap索引

是由一串位所组成的。如果某一位置位(为1),就表示该位所对应的行包含索引的键值。如果该位没有被置位(为0),就表示该位所对应的行不包含索引的键值。

优点:OLAP 例如报表类数据库 重复率高的数据 特定类型的查询例如count、or、and等逻辑操作因为只需要进行位运算即可得到我们需要的结果。

缺点:不适合重复率低的字段,还有经常DML操作(insert,update,delete),因为位图索引的锁代价极高,修改一个位图索引段影响整个位图段,所以对于OLTP 系统位图索引基本上是不适用的。

索引扫描的种类

根据索引的类型与where限制条件的不同分类

(1) 索引唯一扫描(index unique scan)通过unique或primary key约束来保证只返回一条数据,那么优化器就会选择索引唯一扫描。

(2) 索引范围扫描(index range scan)使用一个索引存取多行数据或者索引键非唯一,即使返一行记录也走范围扫描。

(3) 索引跳跃扫描(index skip scan)当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,这时候查询计划就有可能使用到。

(3) 索引全扫描(index full scan)和索引快速扫描(index fast full scan)如果想搜索的列都包含在索引里面,那么index full scan 和 index fast full scan 都可以被采用代替full table scan。

index full scan首先要找到索引的根,然后通过枝节点找到第一个叶节点,然后再顺着叶节点链扫描整个索引,只能使用单块读,会发现大量的db file sequential read等待。

index fast full scan对索引的扫描可以根据该索引的extent来进行,采用多块读的方式进行。因此在这类操作中,我们可以看到会话会大量的出现db file scattered read等待。

索引的适用场合

B*Tree索引

常规索引,多用于oltp系统,快速定位行,应建立于存在很少相同值的列。

反向索引

B*Tree的衍生产物,应用于特殊场合,在并发环境序列增加的列上建立,不适合做范围扫描。

降序索引

B*Tree的衍生产物,应用于有降序排列的搜索语句中,索引中储存了降序排列的索引码,提供了快速的降序搜索。

函数索引

B*Tree的衍生产物,应用于查询语句条件列上包含函数的情况,索引中储存了经过函数计算的索引码值。可以在不修改应用程序的基础上能提高查询效率。

位图索引

位图方式管理的索引,适用于OLAP(在线分析)和DSS(决策处理)系统,适合集中读取,不适合插入和修改,提供比B*Tree索引更节省的空间。

常见几种不走索引的场景

(1)隐式类型转换

(2)索引失效

(3)like '%***'

(4)is null 或者is not null

(5)使用<> 或者!=

(6)在索引列上使用函数

(7)在索引列上运算

点点关注不迷路~点点转发真威武~每日更新最新动态~谢谢各位老爷ヾ(✿゚▽゚)

总结

以上是生活随笔为你收集整理的查询除了一列意外_想让你的查询语句变快吗?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。