mysql性能优化-索引

1.查询索引的几种方式mysql

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

2.添加主键索引
指定为主键就为其添加索引了,固然也能够建立表后,指定主键索引web

alter table 表名 add primary key

3.添加普通索引算法

create index 索引名 on 表名(列)

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

4.添加惟一索引svg

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

5.添加全文索引code

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

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

alter table 表名 drop 索引名

7.删除主键索引blog

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越高查询效率越低