数据库索引

索引

学习索引之前,我们需要先理解以下的一些问题

  • 索引相当于是什么?
    索引就相当于是一本书的目录
  • 索引的作用是什么?
    如果使用索引恰当的话,可以极大的增加sql查询速度
  • 索引的副作用是什么?
    如果使用了索引的话,那么表增删的效率会有所降低,因为增加跟删除数据库都要计算,

  • 索引的底层是怎么实现的?
    索引底层是用B树做的,也可以称为B+树实现的

语法
create index index_name on table_name(‘列名’);

学习索引之前,我们需要创建数据,因为少量的数据是体现不出索引的优势的,我们就创建一个五百万条数据的表吧,

我们使用 plsql来填充数据,
declare
  i number := 1;
begin
   loop
     exit when i > 5000000;

     insert into t_user values(seq_user.nextval,'值i=:'||i);
     i := i+1;
   end loop;  
    commit;
end;

那个,要是电脑性能不是很好的,,,弄50万 100万就行,,别跟电脑过不去,
需要注意的是,表的数据字段长度设置大一点,否则会报错,

那么我们开始查询

首先我们使用主键来查询,
这里写图片描述

实际上看执行时间是不准的,我们一般分析sql语句是否需要优化,我们需要通过sql的执行计划来判断
这里写图片描述

我们可以判断,我们刚刚的sql语句基本是没有问题的,但是我们明明没有创建索引,但是为什么会显示使用了索引呢??? 这主要是因为主键自带索引,

那么我们为了凸显索引的作用,我们就不使用索引列查询,
这里写图片描述

我们通过执行计划来分析这条语句
这里写图片描述

跟我们刚刚的比起来,Cost消耗了太多太多,那么我们就需要解决这个问题了,
这里写图片描述

创建索引可能会有点慢,这是正常的,
然后我们再来执行刚刚的sql语句
这里写图片描述

主要是看执行计划,如果是mysql的话
explain sql语句 , 就可以查看执行计划了

如果是oracle,那么F5就行,

这里写图片描述

这条语句其实就差不多没什么问题了,但是千万要记住,索引并不是越多越好,尽量少创建索引,

然后我们总结一下哪些情况需要创建索引

创建索引的情况

  • 主键约束默认建立唯一索引
  • 频繁作为查询条件的字段应该创建索引
  • 多表查询中经常与其它表建立关系,外键字段建立索引
  • 查询中经常用来排序的字段
  • 查询中经常用来统计或者分组字段
    说白了,就是需要经常用来查询的字段

不创建索引的情况

  • 频繁更新的字段: 每次更新都会影响索引树
  • where 条件用不到的字段
  • 数据太少的表
  • 重复的记录多,也不用创建字段,因为没有多大的意义

索引失效

以下情况会发生索引失效

  • 数据库执行的过程中进行了其它操作,如数据类型转换,解决的办法是跟数据库接触的字段使用封装数据类型
  • 最佳左前缀法则: 如果索引了多列,要遵循最左前缀法则. 查询从索引的最左列开始并且不跳过索引中的列
  • 存储引擎不能使用索引中范围条件右边的列
  • mysql在使用不等于条件判断的时候,索引会失效引发全表扫描
  • is null, is not null 索引会失效,无法使用索引
  • like以通配符开头(‘%xxx…’)索引会失效,导致全表扫描
  • 少用or,它会导致索引失效
  • 字符串不加单引号索引失效

这里写图片描述

索引主要就讲到这里,主要是入门,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值