美文网首页
mysql 索引笔记!

mysql 索引笔记!

作者: DragonersLi | 来源:发表于2017-06-30 18:26 被阅读42次

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;
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%’ 会用到 索引:

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

相关文章

  • mysql笔记

    mysql笔记 索引创建索引创建唯一索引CREATE UNIQUE INDEX indexName ON tabl...

  • Mysql 索引 & 锁

    Mysql索引在开发工作中经常用到,在此总结一些关于mysql索引的一些学习笔记 1mysql索引的本质是什么? ...

  • 01.MySQL架构与SQL执行流程

    MySql笔记,笔记分为四个部分:1.MySQL架构与SQL执行流程2.MySQL索引原理与使用原则[https:...

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • MySQL索引(一)

    学习笔记是学习了 极客时间 - 《MySQL实战45讲》整理的笔记。 在 MySQL 中,索引是在存储引擎层实现...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • MySQL索引的使用

    MySQL索引 MySQL索引可以快速提高MySQL的检索速度。索引分单列索引和组合索引单列索引:即一个索引只包含...

  • mysql 索引笔记!

    mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引. 单列索引:一个索引只包含一个列,一个表可...

  • MySQL笔记 - 索引

    前言 索引是存储引擎用于快速找到记录的一种数据结构,和书的目录一样,索引的出现就是为了提高数据的查找效率。 数据量...

  • mysql索引笔记

    常见索引的类型 hash索引适用于等值查询的场景 有序数组适用于等值查询和范围查询 搜索数 InnoDB B+树索...

网友评论

      本文标题:mysql 索引笔记!

      本文链接:https://www.haomeiwen.com/subject/unsicxtx.html