/*
索引 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)
);