码迷,mamicode.com
首页 > 数据库 > 详细

数据库索引

时间:2018-12-22 01:23:40      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:删除索引   第一个   tween   很多   主键   区分   计算   直接   匹配   

在创建表的时候创建索引

  create table 表名(字段1 格式(宽度), 

            字段2 格式(宽度),

           index 索引名(想要成为索引的字段名));

在建表的时候创建索引

  1.create table 表名 (字段名 类型 primary key,      #主键也可以作为索引值

           字段名 类型 (宽度));

 

  2.create index 索引名 on 表名(字段名);

 

  3.alter table 表名 add index 索引名(字段名);

 

删除索引

   drop index 索引名 on 表名;

 

索引的基本用法

  设置那个字段为索引,那么查找条件就是用这个字段,就能够加速查询

 

索引的正确使用方法

  1.如果查询的结果是很多条数据的话我们仍然不能命中索引(> .< . >= . <= . !=(<>) . like . between and)

  2.如果我们选定某一列作为索引的时候,这一列必须是区分度比较高的列,如果这一列的内容都是重复的,那么创建了索引也不会有任何的加速效果。

  3.索引列不能在条件中参与计算。

  4.对于sql中的or来说,即便找到一个为假的条件也还是要去判断另外的条件是否成立,所以mysql并没有进行优化,所以查询都是从左到右依次进行的,所以使用or语句很难命中索引。

  对于sql语句中的and来说,由于只要找到一个为假的条件就可以放弃判断整个语句,所以mysql进行了优化,在所有and条件中会找到第一个区分度最高的列来使用它的索引,来达到加快查询速度的效果

  5.联合索引:最左前缀匹配原则

  create index 索引名 on 表名 (id,email,name)

  联合索引,第一个索引项是这个索引的姓,每一次查询条件必须带着一个索引项字段(例id)才能命中联合索引,如果条件中丢失了第一个索引项来创建条件,那么不能命中联合索引。。

  create index 索引名 on 表名 (id,email,name,sex)

 

explain

explain只是在真正使用某一条sql语句之前先来看看这条语句计划中是怎么执行的

 

 

覆盖索引

  是你能够从辅助索引(非聚集索引)中直接拿到想要的数据,而不需要再经过IO从聚集索引中取值了。

  可以在配置中开启慢日志,把所有的sql语句执行的超过了你预期时间的都记录下来,方便我们查看具体慢的sql语句,来进行修改和优化

 

聚集索引 直接把数据存储在建立好的索引中

非聚集索引(辅助索引) name,sex 只有索引字段存储在索引中,该字段所在行的其他数据存储在另外的地址,在辅助索引的叶子节点上有一个指针指向这行数据所在的地址。

select name where name like ‘eva’;

select name ,sex where name like ‘eva‘;

age 创建一个索引

select age where age > 60;     #覆盖索引

select age,name where age > 60;     #不是覆盖索引

 

age,name创建一个联合索引

select age,name where age > 60;     #覆盖索引

 

数据库索引

标签:删除索引   第一个   tween   很多   主键   区分   计算   直接   匹配   

原文地址:https://www.cnblogs.com/hahahu/p/10159154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!