十四、索引
索引的概念
索引相当于一个目录,能够更快的查询到你所想要的信息
索引分为两种:
二叉树索引(log2N)和哈希索引(1)
索引的好处与坏处
好处:
加快查询速度(select)
坏处:
降低了增、删、改的速度(insert/delete/update)
增大了表的文件大小(索引文件甚至可能比数据文件还大)
现在一个问题:
公司换服务器导数据
新闻表 500W行,15列,10列加了索引
应该先去掉索引,再导入。
最后再统一加索引(因为你每一条数据导入索引的速度是非常慢的)。
索引的使用原则:
1.不过度索引
2.索引条件列(where后面最频繁的条件比较适宜索引)
3.索引散列值,过于集中的值不要索引
例如:给性别“男”,“女”加索引意义不大。
索引的管理
索引类型:
普通索引 (index):仅仅是加快查询速度
唯一索引 (unique):行上的值不能重复
主键索引 (primary key):不能重复
主键必唯一,但是唯一索引不一定是主键
一张表上,只能有一个主键,但是可以有一个或多个唯一索引
全文索引 (fulltext):
查看一张表上的所有索引
Show index from 表名 \G
建立索引
Alter table 表名 add index/unique/fulltext 索引名[可选](列名);
建立主键索引:
Alter table 表名 add primary key(列名);//不要加索引名,因为主键只有一个
删除索引:
Alter table 表名 drop index索引名;
删除主键索引:
Alter table 表名 drop primary key;
全文索引与停止词
关于全文索引的用法:
Select id,email,match (intro) against (‘health’) from member;(我们在查看health的时候它在各个行上所计算出来的匹配度,为0则为不匹配,非0则为匹配)。
全文索引在MySQL的默认情况下,对于中文意义不大。
因为英文有空格、标点符号来拆成单词,进而对单词进行索引
而对于中文来说,没有空格来隔开单词,MySQL无法识别每个中文词
停止词的概念
像那种特别常见的单词,例如:this,that,is,in,on,of,you,my,i,等等这些简单常见的单词
它是不会给你加索引的。
通过全文索引查找
例:
Select * from member where match (intro) against(‘database’);
如果不是通过索引查找,就是这样
Select * from member where intro like ‘%taba%’;
这样查,行数少没有什么问题
但是行数一多,例如member表有1000万行数据,
那它就是一行一行找,恰巧database这个单词在第1000万行,
那这个工作量就是非常大、非常费时的