Mysql性能优化之索引

Mysql性能优化之索引

一、基本介绍

索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息(来自百度百科)。通俗讲就是索引类似于书本上的目录,可以快速找到书中的某篇文章。所以索引主要是用来提高检索速度的。

1、Mysql性能分析

在Mysql中,通过SHOW STATUS LIKE 'value’命令来查看Mysql的性能参数。value值整理列表如下:

/**查看链接次数**/
SHOW STATUS LIKE "Connections"; 
/**服务器上线时间**/
SHOW STATUS LIKE "Uptime";
/**慢查询次数**/
SHOW STATUS LIKE "Slow_queries";
/**查询操作次数**/
SHOW STATUS LIKE "Com_select";
/**插入操作次数**/
SHOW STATUS LIKE "Com_insert";
/**更新操作次数**/
SHOW STATUS LIKE "Com_update";
/**删除操作次数**/
SHOW STATUS LIKE "Com_delete";

上面命令中,使用最多的估计是慢查询次数(SHOW STATUS LIKE ‘Slow_queries’)性能分析命令。使用该命令结合慢查询日志分析查查询比较慢的sql语句,然后进行相应优化;

2、Mysql慢查询日志

慢查询日志,主要是用来分析具体哪条SQL语句导致慢查询产生,从而针对性的优化Mysql系统查询。以下总结怎样去配置慢查询日志服务,并怎样查看慢查询日志;

/**查看慢查询日志状态信息**/
SHOW VARIABLES LIKE '%slow_query_log%';
/**开启慢查询日志:1表示开启,0表示关闭**/
SET GLOBAL slow_query_log=1;
/**查看慢查询定义的时间**/
SHOW VARIABLES LIKE 'long_query_time%';
/**设置慢查询定义时间。单位:秒**/
SET long_query_time=4;

二、Mysql索引学习

(1)、基本分类

  • 普通索引:可以为表中的任何字段建立索引,没有任何限制。是我们使用最多的索引
  • 唯一索引:所设置的字段最好是主键Primary key,保证数据唯一性。
  • 全文索引:仅支持MyISAM模式下的表,Mysql数据默认是IndexDB模式,所以在该模式下使用全文索引是无效的。同时全文索引会消耗更多的空间来提高查询效率,对于大数据量比较多,操作性少的表这种索引方式是合适的;
  • 组合索引:现在SQL中WHERE语句一般是组合语句,所以对于索引我们也需要建立组合索引来调高组合查询效率;

(2)、基本操作

  • 普通索引:
/**创建索引**/
CREATE INDEX index_name ON table(col_name);
/**OR**/
ALTER TABLE table ADD INDEX index_name(col_name);
/**删除索引**/
DROP INDEX index_name ON table;
/**查看索引**/
SHOW INDEX FROM table;
  • 唯一索引:
/**创建索引**/
CREATE UNIQUE INDEX index_name ON table(col_name);
/**OR**/
ALTER TABLE table ADD UNIQUE INDEX index_name(col_name);
/**同上**/
  • 全文索引:
/**创建索引**/
CREATE FULLTEXT INDEX index_name ON table(col_name);
/**OR**/
ALTER TABLE table ADD FULLTEXT INDEX index_name(col_name);
/**同上**/
  • 组合索引:
/**创建索引**/
CREATE INDEX index_name ON table(col_name1,col_name2,...);
/**OR**/
ALTER TABLE table ADD INDEX index_name(col_name,col_name2,...);
/**同上**/

(3)、索引效果分析

这里以普通索引来做演示,通过演示SELECT查询语句来分析索引带来的性能优化;同时模糊查询对索引的有效性会有一定的影响。以下会进行总结;

  • 未使用索引前
EXPLAIN SELECT * FROM table WHERE col_name='xxx';
EXPLAIN SELECT * FROM table WHERE col_name LIKE '%xxx%';

在这里插入图片描述

  • 使用索引后——(精确查询)
EXPLAIN SELECT * FROM table WHERE col_name='xxx';

在这里插入图片描述

  • 使用索引后——(模糊查询)
EXPLAIN SELECT * FROM table WHERE col_name LIKE '%xxx%';

在这里插入图片描述

通过上面总结可知,使用索引对查询来说性能有不错的提升。同时对于在模糊查询的情况下,普通索引并没有带来性能上的提升(这里根据demo来定义,总感觉不对。有谁知道正解,望及时指出)。

(4)、索引总结

总结:索引是一种利用空间换时间的优化机制,建立合理的索引可以大幅度提高数据库的数据查询效率;但是过度使用索引机制,会浪费更多的时间去维护索引,占用不必要空间,影响Mysql中INSERT,UPDATE和DELETE语句对数据的操作速度;

  1. 索引要创建在where和join用到的字段上;
  2. 以下操作符号可以应用索引:<,<=,=,>,>=,BETWEEN,IN,LIKE;不以%开头,NOT IN 可以用NOT exists代替;
  3. 在使用max() min()时最好加上索引;
  4. 单索引要创建在确实需要的地方。多列索引有最佳左前缀特性。所以尽量左边的字段是最常用的;
  5. 索引不会包括有NULL值。有NULL,索引就失效
  6. 使用短索引,一个字段字太多,可以建立部分索引,只取前十个字,节约空间;
  7. explain select * from myz 来测试一下语句的效率…

猜你喜欢

转载自blog.csdn.net/u012475786/article/details/90753856