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%";
| 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