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