index

/*
索引 index
   形象点说:索引就是目录。当数据量多的时候,可以加快你的查询。
   索引底层的使用类似于map,在原来的列旁边加上一个key来标明对应值的value存储在哪个位置,又有点类似于数组的下边,反正就是提高了查询速率,也使得增删改变得复杂了些
   一般在查询操作频繁的列上加索引,一般在列的重复度低的列上加索引
   创建索引:
   CREATE [UNIQUE]|[CLUSTRE] INDEX索引名 ON 表名(列名[排序方式]...)
   删除索引:DROP INDEX 索引名
   
   索引的分类:
         普通索引
         唯一索引
         主键索引
         全文索引 (在中文索引下无效,要分词+索引,一般使用第三方插件)
         
   索引的长度:
         有些时候,某一个列的一部分内容是相同的,为了加快查询速率,我们可以仅仅针对该列的前几个字符加上索引。
        指定索引的长度并不会限定插入数据的长度,而是在检索的时候,索引的范围就在数据的前多少个字符
   
   多列索引:
        就是将两列或者多列的值看成一个整体,然后给它加上索引 
   
   冗余索引:
        指的就是一个列上有多个索引的现象       
       
*/

create table key1
(
name char(10),
email char(20),
key name(name),-- 给name列加上名为name的普通索引
unique key uniques(email)  -- 给email列加上名为uniques的唯一索引,唯一索引不仅仅起到加快查询速率的作用,并且起到了限制不能重复的作用
)

create table key2
(
 id int,
 name varchar(20),
 primary key id(id) --给id列加上主键索引,加快速率并且起到主键约束作用
)

create table key3 -- 创建唯一索引并且为索引指定长度
(
 id int,
 email varchar(30),
 unique key un_em(email(10)) 
)

--我们存姓和名有时候喜欢分开存,但是有时候偏偏喜欢姓名连起来找整个人
create table key4
(
 firs varchar(20),
 las varchar(20),
 key nam(firs,las)
)
--当查询指定姓名的时候回使用索引,sal是很聪明的额,它会分析你的查询的条件,如果可以匹配索引就会自动帮助你调用索引,a and b和b and a是一样的,都会调用刚才的索引
select * from key4 where fies='li' and las='mm';
--查询内容使用索引的前部分也会使用索引,后部分就无法使用了,好像是传说中的左前缀吧
select * from key4 where fies='li'; -- 使用索引
select * from key4 where nam='yy'; --不会使用索引

--
create table key5
(
 firs varchar(20),
 las varchar(20),
 key fis(firs),
 key nam(firs,las)
);
原文地址:https://www.cnblogs.com/aigeileshei/p/5596980.html