MySQL索引及慢查询

MySQL索引讲解

MySQL数据库常见索引类型包括:普通索引( normal))、唯一索引( unique))、全( full text))、主键索引( primary key))、组合索引等,以下为每个索引的应用场景及区别

普通索引: normal,使用最广泛。

唯一索引: unique,不允许重复的索引,允许有空值。

全文索引: full text,只能用于MyISAM表, full text主要用于大量的内容检索。

主键索引: primary key.又称为特殊的唯一索引,不允许有空值。

组合索引:为提高 MySQL效率可建立组合索引。

MySQL数据库表创建各个索引命令,以t1表为案例,操作如下:

主键索引: ALTER TABLE t1 ADD PRIMARY KEY ('column')。

唯一索引: ALTER TABLE t ADD UNIQUE ('column')。

普通索引: ALTER TABLE t1 ADD INDEX index__name ('column')。

全文索引: ALTER TABLE t1 ADD FULLTEXT ('column')。

组合索引: ALTER TABLE t1 ADD INDEX index__name('column1','column2','column3')。

===================================================================

创建索引命令:

ALTER TABLE 用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。(我这里以t1表为例来讲解)

ALTER TABLE t1 ADD INDEX index_name (name)

ALTER TABLE t1 ADD UNIQUE (name)

ALTER TABLE t1 ADD PRIMARY KEY (name)

或者使用create创建

CREATE INDEX index_name ON t1 (name)

CREATE UNIQUE INDEX index_name ON t1 (name)

删除索引

DROP INDEX index_name ON talbe_name

ALTER TABLE t1 DROP INDEX index_name

ALTER TABLE t1 DROP PRIMARY KEY;

查看索引

show index from t1;

show keys from t1;


MySQL慢查询

1) 查看当前mysql慢查询

show variables like "%slow%";

show variables like "%long_query%";

image.png

| slow_launch_time | 2 |  超过2秒定义为慢查询。

| slow_query_log | OFF |  慢查询关闭状态。

| slow_query_log_file | /data/mysql/var/db-Test2-slow.log | 慢查询日志的文件。

2) 开启慢查询日志方法

开启 MySQL慢查询日志方法有以下两种

(1) MySQL数据库命令行执行命令如下:(临时设置,重启MySQL后恢复)

set global slow_query_log =on;

set global long_query_time=2;

需要断开重新登录MySQL,再查看mysql慢查询参数设置,不然查询内容不会改变

show variables like " slow %"

(2)编辑my.cnf配置文件中添加代码如下:(永久设置)

log-slow-queries =/data/mysql/localhost. log #日志目录。 

long_query_time =0.01 #记录下查询时间查过。(这里只是为了做实验才设置了0.01秒,此处默认值为10秒)

log-queries-not-using-indexes #表示记录下没有使用索引的查询。

3) mysqldumpslow分析日志

可用mysql提供的mysqldumpslow,使用很简单,参数可-help查看

-s:排序方式。

c , t , l , r 表示记录次数、查询所需总时间、查询锁的总时间、返回的记录数;

# ac , at , al , ar 表示相应的倒叙;

# -t:返回前面多少条的数据;

# -g:包含什么,大小写不敏感的;

示例:

#按照返回的行数从大到小,查询前10行的SQL语句;

mysqldumpslow -s r -t 10 /data/mysql/var/db-Test2-slow.log

#按照返回的行数从大到小,查询前2行的SQL语句;

mysqldumpslow -s r -t 2 localhost.log

#按照查询总时间从大到小,查询前5行,同时过滤select的SQL语句;

mysqldumpslow -s t -t 5 -g "select" localhost.log

参考文档:https://www.cnblogs.com/kerrycode/p/5593204.html

版权声明:
作者:WaterBear
链接:https://l-t.top/1777.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>