SQL优化核心思想笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本博客为SQL优化核心思想学习笔记


提示:以下是本篇文章正文内容,下面案例可供参考

一、基数

 某个列唯一键的数量叫做基数。比如性别列,该列只有男女之分。所以基数是2,主键列的基数等于表的总行数。基数高低影响列的数据分布。

grant dba to scott;

conn scott/tiger

create table test as select * from dba_objects;

SCOTT@PROD> select count(distinct owner),count(distinct object_id),count(*) from test;

COUNT(DISTINCTOWNER) COUNT(DISTINCTOBJECT_ID)   COUNT(*)
-------------------- ------------------------ ----------
                  29                    86970      86970

TEST表86970行,owner列的基数为29,说明该列有大量重复值。OBJECT_ID列的基数等于总行数,说明OBJECT_ID没有重复值,相当于主键。。owner列的数据分布如下

select owner,count(*) from test group by owner order by 2 desc;

owner的数据分布极不均衡,我们运行如下SQL

 select * from test where owner = 'SYS''

SYS列有37786条数据,也就是要返回表43.4%的数据


SCOTT@PROD> select 37786/86970*100 from dual;

37786/86970*100
---------------
     43.4471657
那么请你思考,你认为这样的查询应该走索引吗?

select * from test where owner = 'SCOTT'

 

 select 7/86970*100  Percent from dual;

 

 scott有7条数据,从86970多的表中取7条数据,相当于要返回表中0.009%的数据,那么请思考,返回表中0.08%的数据不应该走索引吗?


总结

如果你现在还不懂索引,那么请记住,当查询结果在5%以内的数据时,应该走索引,但查询结果超过表5%的数据时,应该走全表扫描。

 为什么会有这样的结论,请看下面章节进行概述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值