MySQL索引

Posted 开拖拉机的拉风少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引相关的知识,希望对你有一定的参考价值。

1.作用:快速找出在某一列中特定的值,用于提高查询效率;

2.优势:提高检索效率,降低数据库IO成本;降低数据库排序成本,降低cpu消耗;

3.劣势:占用空间;降低表的更新的速度;

4.索引分类:

  (1)单值索引:即一个索引只包含单个列,一个表可以有多个单列索引;

  (2)唯一索引:索引的值必须唯一,但允许有空值;//比单质索引更快;

  (3)复合索引:一个索引包含多个列;INDEX Multildx(id,name,age);

  (4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引;

  (5)空间索引:是对空间数据类型的字段建立的索引;

5.创建操作:

  (1)创建:

    (1)单值索引:CREATE INDEX 索引名 ON table (column1,colum2…);

    (2)唯一索引:create unique index 索引名 on 表名(列名)

  (2)删除:DROP INDEX 索引名 ON table;

  (3)查看:SHOW INDEX FROM 表名;

  (4)自动创建索引:1)在表上定义主键时,会自动创建一个对应的唯一索引;

            2)定义一个外键,会自动创建一个普通索引;

6.explain:查看搜索语句使用的索引;

  例:explain select * from 表名 where 列=列值;

  (1id:select识别符,出现第几次;

  (2)select_type:是否是简单的select查询,不使用union和子查询的为简单查询;

  (3)table:当前查的表;

  (4)type;

  (5)key:实际选用的索引;

  (6)possible_keys;

  (7)key_len:显示索引的长度(也就是使用索引的个数),当key字段为null时,索引的长度为null;

  (8)ref;

  (9)rows;

  (10)extra;

7.索引结构:

1BTree索引:B+树索引

   

2hash索引:用哈希算法,把键值换算成新的哈希值,只需一次哈希算法就可以找到,速度极快;

8.索引失效:

  1)避免在索引列上出现null;//where  book_name=null;

  2)不要在索引列上进行算术运算;//select age+1 from  user;

  3)避免实现!=或者<>、is null或者is not null、in等可能导致全表遍历的操作;

  4)模糊查询只能使用右边%;

  5where语句后尽可能少用小括号、或者不要出现小括号嵌套小括号;

 

以上是关于MySQL索引的主要内容,如果未能解决你的问题,请参考以下文章

mysql索引类型和索引方式

mysql 索引

mysql索引(九)索引合并

mysql---索引优化

MySQL索引

mysql索引?