MySQL菜鸟笔记三

目录

前文回顾

一、索引

二、索引的创建

三,索引的命中


前文回顾

系列文章第一、二部分,需要掌握的内容:

一、索引

索引有什么用?

约束,加速查找

索引分哪几种?

普通索引(index):加速查找

主键索引(primary key):加速查找,不可重复,不可为空,

唯一索引(unique key):加速查找,不可重复

联合(组合)索引:

        联合主键

        联合唯一

        联合普通索引

如何命中索引,哪些情况无法命中索引?

二、索引的创建

索引的存储方式:hash:单值快,但存储非大小顺序,非实际数据的顺序。

                             btree 二叉树:范围查找快,数据库一般是btree

有索引查找快,但其他操作稍慢与无索引,原因是更新索引文件。

索引文件单独存放的,占用了硬盘空间。索引 不是越多越方便,用的多的地方创建索引

#主键索引
alter table table_name add primary key (column name)
alter table 表名 drop primary key
--如果主键是自增的,则需要先处理再删除
    alter table tablename modify id int ; 【重新定义列类型】
    alter table tablename drop primary key;
#普通索引
create index index_name on tablename("XXXX");
drop index index_name on tablename;

#唯一索引
create unique index index_name on tablename('XXXX')
drop unique index index_ame on tablename;

#联合(组合)索引(左前匹配,无左前不匹配)
create unique index index_name on tablename('xx','xxxx');
create index index_name on tablename('xx','xxxx');
alter table table_name add primary key('xxx','xx');


组合索引的匹配效率>索引合并
覆盖索引:并非真正的索引,只是一个索引文件,比如以name为索引的文件(index_name),如果我只查找XXX名字,就可以不 通过实际的数据,而是只查找索引文件。
索引合并:多个单列索引合并。
    比如info表有两个索引:name,email;
select * from info where name='xx' and email='xxxx'


三,索引的命中

在实际的使用中有用到索引,则表示命中。为了高效率,尽量命中索引。下面的做法可能无法命中索引导致低效率。

-   like '%xxx'
-   函数的使用,select * from tb1 where reverse(xxxx)='xxxxx'; 解决建议:先处理好在拿上来做数据 
    的 
            操作
-   or 且两者中有一个没有创建索引
        select * from tbname where id=1 or name='xxxx'; 
-   类型不一致
    select * from tb1 where work_id = 999;如果实际值的类型是字符串,条件也要用字符串'999';
-  != 不等于不走索引(主键索引除外)
-  >大于小于 不走索引(主键索引或者索引是整数类型除外)
-   order by XXX(XXX非主键或者非索引)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值