关于mysql索引:mysql索引优化总结
最近一周的工作都集中在慢sql的治理上,大部分都是基于索引进行优化,所以做了下述的总结。 1. explain 介绍explain(执行打算),应用 explain 关键字能够模仿优化器执行sql查问语句,从而晓得 MySQL 是如何解决sql语句。explain 次要用于剖析查问语句或表构造的性能瓶颈。 通过 explain + sql 语句能够晓得如下内容: 表的读取程序。(对应id)数据读取操作的操作类型。(对应select_type)哪些索引能够应用。(对应possible_keys)哪些索引被理论应用。(对应key)表间接的援用。(对应ref)每张表有多少行被优化器查问。(对应rows)explain 执行打算蕴含字段信息如下:别离是 id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、extra 12个字段。每个字段对应的介绍如下。能够先建几张表举例。上面建表各自举例子: xCREATE TABLE `blog` ( `blog_id` int NOT NULL AUTO_INCREMENT COMMENT '惟一博文id--主键', `blog_title` varchar(255) NOT NULL COMMENT '博文题目', `blog_body` text NOT NULL COMMENT '博文内容', `blog_time` datetime NOT NULL COMMENT '博文公布工夫', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `blog_state` int NOT NULL COMMENT '博文状态--0 删除 1失常', `user_id` int NOT NULL COMMENT '用户id', PRIMARY KEY (`blog_id`)) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8CREATE TABLE `user` ( `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户惟一id--主键', `user_name` varchar(30) NOT NULL COMMENT '用户名--不能反复', `user_password` varchar(255) NOT NULL COMMENT '用户明码', PRIMARY KEY (`user_id`), KEY `name` (`user_name`)) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8CREATE TABLE `discuss` ( `discuss_id` int NOT NULL AUTO_INCREMENT COMMENT '评论惟一id', `discuss_body` varchar(255) NOT NULL COMMENT '评论内容', `discuss_time` datetime NOT NULL COMMENT '评论工夫', `user_id` int NOT NULL COMMENT '用户id', `blog_id` int NOT NULL COMMENT '博文id', PRIMARY KEY (`discuss_id`)) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf81. id示意查问中执行select子句或者操作表的程序,id的值越大,代表优先级越高,越先执行。针对上面sql例子: ...