MySQL数据库索引及慢查询讲解

MySQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。

如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

常见索引类型:

1) normal:表示普通索引

2) unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

3) full text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

创建索引命令:

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

MySQL慢查询:

慢查询对于跟踪有问题的查询很有用,可以分析出当前程序里那些Sql语句比较耗费资源。

1) 查看当前mysql慢查询

show variables like "%slow%";

 

mysql or查询索引 mysql索引查询过程_慢查询

 

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

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

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

2) 开启慢查询日志方法

Mysql数据库里执行:set global slow_query_log=on;

在my.cnf中添加,如下:

log-slow-queries = /data/mysql/var/db-Test2-slow.log #日志目录。long_query_time = 1   #记录下查询时间查过1秒。log-queries-not-using-indexes  #表示记录下没有使用索引的查询。

3) mysqldumpslow分析日志

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

-s:排序方式。

c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;

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

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

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

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

坚持到无能为力,拼搏到感动自己