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子句中的字段不该被创建索引
explain select * from house
show staus like 'hander_read%'
在看到结果中:
handler_read_key这个值越高越好,越高表示索引查到的次数 handler_read_rnd_next越高查询效率越低