Oracle优化:什么情况下该创建索引,什么情况下不创建索引「建议收藏」

Oracle优化:什么情况下该创建索引,什么情况下不创建索引「建议收藏」sql 的优化大多数情况下是索引的优化,那么,什么情况下该创建索引,什么情况下不创建索引呢,回答这个问题之前,先来了解一下基数和选择性吧。基数在

大家好,欢迎来到IT知识分享网。

sql 的优化大多数情况下是索引的优化,那么,什么情况下该创建索引,什么情况下不创建索引呢,回答这个问题之前,先来了解一下基数和选择性吧。

基数

在 Oracle 数据库中,某一列的唯一键的数量叫做基数。

举个例子,比如一张表中有个 sex 字段,它的值只有 “男” 和 “女” 两种情况,那我们就说这一列的基数是2。

我们可以通过如下语句来查询一个字段的基数。

select count(distinct deptno) as num from emp

IT知识分享网

Oracle优化:什么情况下该创建索引,什么情况下不创建索引「建议收藏」

当一个字段的基数越大的时候,该列的数据分布可能就越均衡。字段的基数越小时,该列的数据分布可能就越不均衡。

举个例子,在一个有10000行数据的表中,sex 字段基数为2,他的数据分布可能为9999行是男的,1行是女的,这是分布不均衡的现象。而在身份证字段中,它的基数是10000,每一行都是一个不同的身份证号码,这是分布均衡的现象。

我们可以通过 group by 语句来查看数据的分布情况。

IT知识分享网select deptno,count(1) from emp group by deptno

Oracle优化:什么情况下该创建索引,什么情况下不创建索引「建议收藏」

这个时候如果我们要查询表中性别为男的数据,那么返回的数据就占了表中数据的 99.99%,其实就相当于是全表扫描,这种情况就不应该走索引了。但是如果查询表中性别为女的数据,那么返回的数据就占了表中数据的 0.01%,这个时候时候应该走索引。

一般来说,当返回表中 5% 以内的数据的时候,就应该走索引。超过 5% 的数据就要使用全表扫描。但是这个说法太绝对了,就像上面查询 sex 字段时,查询男性时候超过了 5%,查询女性时候小于 5%,那这个字段需不需要创建索引呢?

这个时候,就需要引入选择性的概念了。

选择性

基数与表的总行数的比值就是选择性。

我们可以通过以下 sql 语句来查询列的选择性。

select count(distinct deptno)/count(1) as selectivity from emp

Oracle优化:什么情况下该创建索引,什么情况下不创建索引「建议收藏」

当一个字段的选择性大于 20%,说明该列数据分布就是比较均衡的了。这个时候如果在 where 子句中使用了该字段,那么就应该创建索引。

PS:文中使用了数据量较少的表来举例子,是因为数据清晰直观,方便大家理解。而在实际情况中,只有大表才会产生性能问题。如果一个表里只有十几二十条数据,也就无所谓优化了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6524.html

(0)
上一篇 2022-12-15 21:10
下一篇 2022-12-15 21:30

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信