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%";
| 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
坚持到无能为力,拼搏到感动自己