MySQL数据库优化_索引
Posted rocker-pg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库优化_索引相关的知识,希望对你有一定的参考价值。
1.添加索引后减少查询需要的行数,提高查询性能
(1) 建表
CREATE TABLE `site_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘自增ID号‘, `phone` varchar(15) NOT NULL COMMENT ‘手机号码‘, `token` varchar(50) DEFAULT NULL COMMENT ‘最近一次登录生成的令牌,用于登录验证‘, `status` tinyint(1) NOT NULL DEFAULT ‘0‘ COMMENT ‘用户活动状态 0:正常,1:锁定‘, `login_status` tinyint(1) NOT NULL DEFAULT ‘1‘ COMMENT ‘当前登录状态 1:在线,2:离线‘, `last_login_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘最近登录时间‘, `channel` tinyint(1) NOT NULL DEFAULT ‘1‘ COMMENT ‘注册来源 1:公众号,2:小程序,3:外部公众号,4:支付宝,5:Web‘, `remark` varchar(255) DEFAULT NULL COMMENT ‘备注‘, `signin_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘注册时间‘, `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间‘, `mallcode` varchar(11) DEFAULT NULL COMMENT ‘万象城code‘, PRIMARY KEY (`id`), KEY `index_phone` (`phone`) ) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT=‘微站点用户表‘;
(2)插入数据
INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘26‘, ‘15022271154‘, ‘a3664fbfed754a2aa371cd2a3f3419f6‘, ‘0‘, ‘2‘, ‘2018-08-14 17:02:06‘, ‘5‘, NULL, ‘2018-07-20 15:34:32‘, ‘2018-08-14 15:07:17‘, ‘0202A003‘); INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘27‘, ‘16633343692‘, ‘7b6223251c9d4798ad4a56f19873cd82‘, ‘0‘, ‘1‘, ‘2018-08-15 09:32:49‘, ‘5‘, NULL, ‘2018-07-30 09:47:06‘, ‘2018-08-15 09:32:48‘, ‘0202A003‘); INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘29‘, ‘17600444462‘, ‘ff4b2c4c331c47c0b320d1dbaa7abf49‘, ‘0‘, ‘1‘, ‘2018-08-13 18:30:11‘, ‘5‘, NULL, ‘2018-08-02 16:06:46‘, ‘2018-08-13 18:30:10‘, ‘0202A003‘); INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘36‘, ‘18755555159‘, ‘c425ac1dbe354a43b56186a54cf624ac‘, ‘0‘, ‘1‘, ‘2018-08-07 17:48:40‘, ‘1‘, NULL, ‘2018-08-07 16:21:17‘, ‘2018-08-07 16:23:59‘, ‘0202A003‘); INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘37‘, ‘187666666158‘, ‘7a7fd66631bd486f8f9f255d206796af‘, ‘0‘, ‘1‘, ‘2018-07-13 16:48:47‘, ‘1‘, NULL, ‘2018-08-07 16:24:49‘, ‘2018-07-13 16:48:46‘, ‘0202A003‘); INSERT INTO `highperformance_mysql`.`site_user` (`id`, `phone`, `token`, `status`, `login_status`, `last_login_time`, `channel`, `remark`, `signin_time`, `update_time`, `mallcode`) VALUES (‘38‘, ‘17777783642‘, ‘8e3c01fd6435471db7f28508713923c1‘, ‘0‘, ‘1‘, ‘2018-08-11 10:50:32‘, ‘5‘, NULL, ‘2018-08-11 10:50:23‘, NULL, NULL);
(3)执行查询
EXPLAIN SELECT * FROM site_user WHERE token = ‘a3664fbfed754a2aa371cd2a3f3419f6‘
(4)分析查询结果,这次查询,要获取1行数据,但是要访问6行数据,执行的是全表扫描,如果表数据量变大的话,需要访问的数量会剧增,性能不高
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | site_user | ALL | NULL | NULL | NULL | NULL | 6 | Using where | +----+-------------+-----------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec)
(5)添加索引
ALTER TABLE site_user ADD INDEX index_token (`token` )
(6)再次执行查询
EXPLAIN SELECT * FROM site_user WHERE token = ‘a3664fbfed754a2aa371cd2a3f3419f6‘
(7)分析查询结果,这次查询,要获取1行数据,但是要访问1行数据
+----+-------------+-----------+------+---------------+-------------+---------+-------+------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+-------------+---------+-------+------+-----------------------+ | 1 | SIMPLE | site_user | ref | index_token | index_token | 153 | const | 1 | Using index condition | +----+-------------+-----------+------+---------------+-------------+---------+-------+------+-----------------------+ 1 row in set (0.00 sec)
以上是关于MySQL数据库优化_索引的主要内容,如果未能解决你的问题,请参考以下文章