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

mysql数据库-索引

时间:2021-06-29 16:10:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:现在   固定   全表扫描   mysql数据库   原则   扫描   解释   也会   出现   

  索引是数据库中用来提高查询效率的一种数据结构,在mysql中的索引默认采用B+树的数据结构,如果没有索引,执行查询时,

mysql必须扫描整张表的记录 ,直至找到所有符合要求的记录,在数据量比较大时,这样做会带来需要开销。如果作为搜索条件

的列上带有索引,则mysql可以通过索引结构迅速得到符合要求的记录。 

索引类型有

1. 唯一索引 

2. 联合索引   联合索引遵循最左前缀原则     create index index_name on table_name(id,name,gender) 

根据最左前缀原则,当搜索条件 select  id from table_name where id=1;     select id,name  ...    select id,gender  

索引失效的条件有:

1. where 的查询条件中  与 or

2. 使用like 模糊查询时,使用% 开头,索引不起作用 

最左前缀原则详解:

假设有这样一个索引——(a,b,c),针对下面的5个关于最左原则的解释,做出举例。

1.必须用到索引的第一个字段,如select * from table where b=’b’ and c=’c’,不会使用到索引。

2.对于索引的第一个字段,用like时左边必须是固定值,通配符只能出现在右边,如select * from table where a like ‘%a%’不会使用到索引,而select * from table where a like ‘a%’则会使用到索引。

3.如果在字段前加了函数或在字段前嵌入了表达式,则不会使用索引。如select * from table where trim(a)>1不会使用索引,select * from table where a+1>1也不会使用索引,而select * from table where a>2会使用到索引。

4.索引的使用与where语句中字段出现的顺序无关,只与是否使用到索引相关字段有关。如select * from table where b=’b’ and a=’a’也会使用索引。

5.使用到索引第一个字段的不等于表达式,即使其他字段不是索引字段也会使用到索引。如select * from table where a=’a’ and ddd=’ddd’会使用到索引。

 对索引的基本优化

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
  2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
  select id from t where num is null
  可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from twhere num=0
  3、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
  4、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

mysql数据库-索引

标签:现在   固定   全表扫描   mysql数据库   原则   扫描   解释   也会   出现   

原文地址:https://www.cnblogs.com/w-Lou/p/14949467.html

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