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 列=列值;
(1)id: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.索引结构:
(1)BTree索引:B+树索引
(2)hash索引:用哈希算法,把键值换算成新的哈希值,只需一次哈希算法就可以找到,速度极快;
8.索引失效:
1)避免在索引列上出现null;//where book_name=null;
2)不要在索引列上进行算术运算;//select age+1 from user;
3)避免实现!=或者<>、is null或者is not null、in等可能导致全表遍历的操作;
4)模糊查询只能使用右边%;
5)where语句后尽可能少用小括号、或者不要出现小括号嵌套小括号;
以上是关于MySQL索引的主要内容,如果未能解决你的问题,请参考以下文章