mysql性能优化-索引

1.查询索引的几种方式

(1)desc 表名(缺点是:不能够显示索引名)
(2)show index from 表名
(3)show keys from 表名

2.添加主键索引
指定为主键就为其添加索引了,当然也可以创建表后,指定主键索引

alter table 表名 add primary key

3.添加普通索引

create index 索引名 on 表名(列)

  建表时其中有key 'index_id(bookid)'在book表中的bookid字段上,建一个名为index_id的普通索引

4.添加唯一索引

create unqiue index 索引名 on 表名(列)

5.添加全文索引

create table articles {
title varchar(200),
boby text,
fulltext(title,body)
}

6.删除索引:除主键除外

alter table 表名 drop 索引名

7.删除主键索引

alter table 表名 drop primary key

8.不加索引为什么慢?
举列

select * from temp where id=4

  这个语句会查询这个表中的所有数据,从1开始往下查询,到了4也不会停下来,也会继续往下查询,以保证没有重复的。
9.加了索引为什么会变快?
因为索引使用了btree二叉树算法——->索引文件

在这里插入图片描述
  比如有11个数,查找索引4只需要四次,二叉树可以查询的是log2N
也就是n=10,可以检索1024个数

全文索引说明:

(1)mysql自己提供的fulltext只针对英文生效->sphinx(core seek)技术处理中文
(2)全文索引的使用办法是:
match(字段1,字段2.。。。)against(关键字)

select * from araticies where  match(title,body) against(‘database’); 

(3)全文索引中有一个停止词,因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用字符和词,就不会创建这些词,称为停止词

索引缺点:

缺点:占用磁盘空间
   对dml语言(增删改)语句会变慢,其实查询相对dml来说大概是9:1的分配。变慢是因为二叉树需要重新排列。

在那些列上适合添加索引:

(1)较为频繁的作为查询条件字段应该被创建
(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
(3)更新频繁的字段
(4)不会出现在where子句中的字段不该被创建索引

查看SQL中索引是否生效:

explain select * from house

在这里插入图片描述

查看索引的使用情况:

show staus like 'hander_read%'

在看到结果中:

handler_read_key这个值越高越好,越高表示索引查到的次数
handler_read_rnd_next越高查询效率越低