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