索引 : 是针对数据所建立的目录 .
作用 : 可以加快查询速度
负面影响 : 降低了增删改的速度 .
索引的创建原则 :
1: 不要过度索引
2: 在 where 条件最频繁的列上加 . 在重复度高的列上不加,比如性别男女;
3: 尽量索引散列值 , 过于集中的值加索引意义不大 .
索引的类型
普通索引 : index 仅仅是加快查询速度 .
唯一索引 : unique index 行上的值不能重复
主键索引 : primary key 不能重复 .
主键必唯一 , 但是唯一索引不一定是主键 .
一张表上 , 只能有一个主键 , 但是可以用一个或多个唯一索引 .
全文索引 : fulltext index 在 mysql 的默认情况下 , 对于中文意义不大 . 一般使用第三方解决方案
因为英文有空格, 标点符号来拆成单词 , 进而对单词进行索引 .
而对于中文, 没有空格来隔开单词 ,mysql 无法识别每个中文词 .
( 上述 3 种索引 , 都是针对列的值发挥作用 , 但全文索引 , 可以针对值中的某个单词 , 比如一篇文章 ,) 全文索引不针对非常频繁的词做索引 , 如 this, is, you, my 等等 .
索引长度 :指定一列部分内容作为索引
多列索引 :两列或多列值看做整体,当做索引。在英文网站时, first name , last name 当做一个整体,此时, where 条件中只有 first name 可以发挥作用, last name 没有发挥作用,这就是作为的左前缀规则。
冗余索引 :某列有多个索引,例如在上面 last name 上再次建立索引。
建立索引
可以在建表时 , 直接声明索引 , 即在列声明完毕后 , 声明索引 .
例如下 :
create table test5 (
id int,
username varchar(20),
school varchar(20),
intro text,
primary key (id),
unique (username),
index (school),
fulltext (intro)
) engine myisam charset utf8;
查看一张表上所有索引
Show index from 表名
建立索引
Alter table 表名 add index /unique/fulltext [ 索引名 ] ( 列名 )
Alter table 表名 add primary key ( 列名 ) // 不要加索引名 , 因为主键只有一个
删除添加索引
删除非主键索引 :Alter table 表名 drop/add index 索引名 ;
删除主键 : alter table 表名 drop/add primary key