mysql 索引笔记!

mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引.

单列索引:一个索引只包含一个列,一个表可以有多个单列索引.
组合索引:一个组合索引包含两个或两个以上的列,

表结构如下:

user    CREATE TABLE `user` (                                                          
          `id` int(11) unsigned NOT NULL AUTO_INCREMENT,                               
          `username` varchar(25) COLLATE utf8_unicode_ci NOT NULL,                     
          `password` varchar(32) COLLATE utf8_unicode_ci NOT NULL,                     
          `email` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,                    
          PRIMARY KEY (`id`)                                                           
        ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试用户信息表';

一、单列索引(只有一个字段)

增加索引:
1. 主键索引 :(建立的规则是 int优于varchar,一般在建表的时候创建,一个表只能有一个主键)
//语法如下:
alter table 表名 add primary key 索引名(字段名);  
//demo如下:
alter table user add primary key id(id);  
primary主键,如果插入值有重复会报类似错误:Duplicate entry '4' for key 'PRIMARY'


2. 唯一索引 :(字段值可以为NULL,但必须唯一)
//语法如下:
create unique  index  索引名  on 表名(字段名);//第一种写法
alter table 表名 add unique  index 索引名(字段名); //第二种写法
//demo如下:
create unique index index_username on user(username);
alter table user add unique index index_username(username); 

unique唯一,如果插入值有重复会报类似错误:Duplicate entry 'username' for key 'index_username'



3. 普通索引 :
//语法如下:
create index  索引名  on 表名(字段名);//第一种写法
alter table 表名 add index 索引名(字段名); //第二种写法
//demo如下:
create index  index_username on user(username);
alter table user add index index_username(username); 




4. 全文索引:(InnoDB不支持,MyISAM支持性能比较好,一般在 CHAR、VARCHAR 或 TEXT 列上创建。)
//语法如下:
alter table 表名 add fulltext (索引名:不填默认字段名)(字段名);  
//demo如下: 
alter table user add fulltext (test)(`desc`);



二、组合索引:(多个字段)
//语法如下:
create index  索引名  on 表名(字段名,字段名,... ); 

//demo如下:
create index index_u_e_m on user(username,email,token);

查看索引:
//语法如下:
show index from 表名;
//demo如下:
show index from user;
mysql 索引笔记!_第1张图片
Paste_Image.png
删除索引:
//语法如下:
alter table `库名`.`表名` drop index `索引名`;
//demo如下:
alter table `1234567890`.`user` drop index `index_email`; //第一种写法
drop index index_email ON `user` ; //第二种写法
like 模糊查询使用索引 demo:
explain select * from user where username like 'a%';
explain select * from user where username like '%a';

like ‘a%’ 会用到 索引:

mysql 索引笔记!_第2张图片
Paste_Image.png
mysql 索引笔记!_第3张图片
Paste_Image.png
  1. like语句的 如果你对字段建立了一个索引.当查询的时候的语句是 lick '%ABC%' 那么这个索引讲不会起到作用.而lick 'ABC%' 那么将可以用到索引!
  2. 索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ' '字符串!
  3. 不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描!
  4. 当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系!

你可能感兴趣的:(mysql 索引笔记!)