目录
1:索引的理解
嗯...什么是索引呢,学过编程语言的同时应该知道数组,知道数组中的元素的查找是通过索引实现的吧,索引在MySQL中出现其实是为了提高查找效率。一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加索引。说简单点,索引就是一本书的目录,是为了缩小搜索的范围而存在的机制。正常情况的查找一个接着一个地找,你有了索引后,他就知道你在哪个范围查找这大大提高了查找效率。
2:索引的创建和删除
创建索引: create index +(创建的索引名) +on 表名 + (表中的要创建的索引的字段名)
create index suo on dept(loc); //这表示在dept这张表的loc字段创建了一个叫suo的索引
删除索引:drop index +(创建的索引名)+ on + 表名
//drop index suo on dept;//删除刚刚创建的索引
检查是否创建了索引:
explain select *from +表名 +where 条件
//就是看具体某一个查找的字段的查找效率
如下面:
看到rows那个字段吗,那里显示14表示查找了14行,这是没有添加索引的情况
下面添加下索引:
很明显,查找效率提高了吖!!!
3:索引的失效
索引虽然可以提高查找效率,但他有时候也会失效,具体我们来看看吧
(1)模糊查询
select *from emp where job='%t';
这个语句是不会走索引的,因为开头是模糊的,他不知道
在那个范围查找,怎么降低效率啊
(2)使用or
使用or的话,必须两边都要有索引才可以,其中一个没有
的话,不走索引。
(3)复合索引
复合索引就是多个字段联合的索引,具体看个例子就懂了
现在创建个索引:
create index suo on emp(job,sal);
使用索引:
explain select *from where job='clerk';//这个语句走了索引
如果是这条语句:explain select *from where sal=800;//这条语句就不会走索引了
总结就是复合索引,走索引走的是左边的
(4)where中的索引参加了运算
如:explain select *from where sal+1=800;
//这条语句不走索引,sal是加了索引,但是他在where中参加了运算,
//注意是sal+1=800而不是sal=800+1哦!!!!!
当然了,索引的实现不止这么多,我也只是列举大家常遇到的哈