MYSQL 基础学习索引(二)

前言

此文章记录学习mysql索引部分


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

一、索引是什么

索引是一种排列好的数据结构,也是文件,和数据表一样,存储在磁盘中,索引对于数据表而言,就像是一本书的目录,能够更加快速的找到你想找到数据的位置;使用索引只有一个目的就是快!(查询的快),索引的作用:约束 和 加速查找;

二、索引的分类

1.普通索引(NORMAL)

  • 创建索引

  • 指令创建

    create index 索引名称 on 表名(列名(int 截取字符个数))

  • 使用 alter 修改 创建

  • alter table 表名 add index 索引名称( 列名 )

    普通索引 只有加快查找作用

2.主键索引(PRIMARY KEY)

  • 创建索引

  • 创建数据表时创建

    create table test(id int not null primary key auto_increment ,name var(16) not null);

  • 使用 alter 修改 创建

  • alter table 表名 add primary key (列名)

  • 主键索引 加快查找 不能为空 不能重复

3.唯一索引(UNIQUE)

  • 创建索引

  • 指令创建

  • create unique index 索引名称 on 表名(列名(int 截取字符个数))

  • 使用 alter 修改 创建

  • alter table 表名 add unique (列名)

    唯一索引 加快查找 不能重复

4.组合索引

5.全文索引(FULLTEXT)

  • 仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
  • Innodb不要用全文索引

三.索引种类

1.hash索引

hash 的索引会把你指定的列重新再生成一个hash值的表,无序的;
优缺点:
查询单值比较快
范围查找比较慢

2.btree索引

二叉树 ;排列的结构 ,左边的比右边的值小,呈金字塔的形式呈现;
单值查找都比较快
范围查找都比较快
你是用innodb引擎 是默认就是 btree;

三.索引无法命中情况

id int 有索引(主键索引) ;name var (20) 没有索引;bio 有索引 var(20)普通索引;

  • LIKE ‘% xx’
    使用like 时,不走索引,会直接到数据表里查找;
    数据多的时候一般不会使用LIKE,一般都会用第三方工具,进行全文索引;

  • 使用函数
    比如 :reverse()

  • or 的使用 可能出现不走索引的时候
    特别是:当查询条件的列没有建索引的时候就会失效

    select * from test where id = 12 or where name =‘小明’;
    这样就就不会走id索引

  • 数据类型不一致

    select * from test where bio = 123;
    此时就不会走索引

  • !=

    select * from test where bio != ‘123’;
    此时就不会走索引
    特殊的:如果是主键,也就是主键索引还是会走索引;

  • 大于 >
    使用大于号时会不走索引
    但是当时是主键索引 或者 数据是 int 整数 还是会走索引

  • order by

    select * from test order by bio desc;
    此时不走索引
    select bio from test order by bio desc;
    这样才会走索引
    select * from test order by id desc;
    但是主键的时候 还是走索引;

  • 组合索引的最左前缀

  • 小总结
    上面都是特殊的情况,都需要记下来;开发的事后要根据业务逻辑来创建索引,索引不是建的越多越好,建索引查询会变得快,但是插入,修改,删除 都会变得比以前慢,数据表添加一条,索引文件也需要添加一条记录,修改删除都会维护索引;

四.注意事项

  • 尽量避免使用 select *
  • count(1)代替 count(*)
  • 创建表var 代替varchar
  • 尽量使用短索引,是指的存储数据比较短列创建索引,如果索引字符太长,创建时可能会出问题;
  • 联表的时候 数据类型一致;
  • 数值重复多的不合适建索引,列如 :男 女 1 ,2 重复性很高 ,就不适合建索引

总结

以上基础,需要记住,有问题请留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值