数据库优化(01)===>索引

转载自:数据库索引之优化查询速度_aogogo的博客-CSDN博客_数据库查询速度

(一)索引的作用

索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,
数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,
5秒以上就已经让人难以忍受了。

(二)mysql的索引类型:

mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。

1)主键索引:主键索引是加在主键上的索引,设置主键(primary key)的时候,它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引;

2)普通索引:创建在非主键列上的索引,这是最基本的索引;

3)唯一索引:索引列的值必须唯一,但允许有空值。

4)聚合索引:创建在多列上的索引。

(三)索引的语法:
查看某张表的索引:show index from 表名;

创建普通索引:alter table 表名 add index  索引名 (加索引的列) 

创建聚合索引:alter table 表名 add index  索引名 (加索引的列1,加索引的列2) 

删除某张表的索引:drop index 索引名 on 表名;

(四):使用索引的代价

     1:索引需要占用硬盘空间,这是空间方面的代价

     2:一旦插入新的数据,就需要重新建立索引,这是时间代价

(五):什么情况下不建议使用索引

      1:数据量小(只有几千条),这时查询用的时间也不会久,因此,建立索引意义不大。

      2:如果某个字段重复率很高,或大多数值是空的,那么不建议对该字段建立索引。

(六):什么情况下,不会触发索引

1:select name from 商品表。      
   没有where 不会触发索引

2:select name from 商品表 WHERE name like '%cc';
    模糊查询时是可以触发索引的,但是%出现在第一个位置查询不会走索引
    select name from 商品表 WHERE name like 'cc%'; 是会触发索引


3: select name from 成绩表 WHERE 成绩+40=100;
    当索引字段 进行某种左值操作,不会用到索引。

4:select * from 商品表 WHERE substr(name)="ff";
    如果对索引字段进行了函数操作,那么无法用到索引


5: select * from 商品表  where 索引=1001 OR name='ff';
     OR 的两边出现非索引字段  不会使用索引

6: 当 索引是多个字段组成的时候,查找时没有包含排在开头的那个字段 不会触发索引。
   索引 PRIMARY KEY (`a`,`b`,`b`)
   select * from where b=1;  时不会触发索引。
   select * from where a=1;  时会触发
            

   (7)主键索引的速度  远快于 非主键索引

       当主键有多个的时候,其实只有 排在第一个的有索引,其他的没有索引速度还是很慢

    


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值