MySQL优化----索引

一、主键索引

创建主键索引

索引名规范:ix_表名_字段名
语法:

create index 索引名 on 表名(字段名)

MySQL优化----索引_第1张图片
查看索引是否创建成功

show index from 表名\G;

MySQL优化----索引_第2张图片

二、全文索引

应用场景:
MySQL优化----索引_第3张图片

创建全文索引

#创建全文索引
CREATE TABLE articles(
 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
 title VARCHAR(200),  
 body TEXT, 
 FULLTEXT(title,body) 
 )engine = myisam charset=utf8;

#插入语句
INSERT INTO articles(title,body) VALUES 
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'), 
('Optimizing MySQL','In this tutorial we well show ...'), 
('MySQL Security','When configured properly,MySQL ...'),
('MySQL vs.YourSQL','In the following database comparison ...');

查看索引是否创建成功

    show index from articles \G;

MySQL优化----索引_第4张图片

使用索引

语法及使用索引查询

#语法
select * from 表名 where match(字段名,...) against('关键字');
#使用索引查询
select * from articles where match(title,body) against('database');
#使用explain分析sql语句
explain select * from articles where match(title,body) against('database');

输入以上两个命令:
MySQL优化----索引_第5张图片
查看是否使用索引

“\G” 的作用是将查到的结构旋转90度变成纵向

explain select * from articles where match(title,body) against('database')\G;

MySQL优化----索引_第6张图片
如果你按照平时我们查关键字的方法模糊查询,是没有使用索引的,看下图;

#使用like关键字模糊查询
explain select * from articles where body like 'database%' \G;

MySQL优化----索引_第7张图片
查询文章表
MySQL优化----索引_第8张图片
然后使用索引查询关键字‘mysql’,看看有什么变化?

注意:这里查询关键字是不区分大小写的;

在这里插入图片描述
是不是很奇怪,分明有五条包含‘mysql’的内容,但为什么查出是空的?
接下来再看,关键字“database”在每一行出现的可能性:

select match(title,body) against('database') from articles;

MySQL优化----索引_第9张图片
分别在第一行与第五行,‘database’出现的几率为38%
作为对比,再来看,关键字“mysql”在每一行出现的可能性:

select match(title,body) against('mysql') from articles;

MySQL优化----索引_第10张图片
奇怪了,反而在每一行都出现的‘mysql’,出现的可能性竟为0。
关键字“mysql”没有创建索引,是因为:

这个关键字占全文50%的比例,所以不能创建索引。

总结

1、 全文索引必须是myisam存储引擎。
2、 MySQL自己的fulltext是不支持中文的,用sphinx(coreseek)技术去处理中文。
3、 语法:match(字段,…) against (‘关键字’)
4、 在50%以上都出现的关键字,是不会做全文索引的,(这个特点就告诉我们,要做全文索引必须是海量数据)。这个词叫停止词(停止字)。

三、唯一索引

你可能感兴趣的:(MySQL,mysql优化,mysql索引)