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 '' COMMENT '用户活动状态 0:正常,1:锁定',
`login_status` tinyint(1) NOT NULL DEFAULT '' COMMENT '当前登录状态 1:在线,2:离线',
`last_login_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最近登录时间',
`channel` tinyint(1) NOT NULL DEFAULT '' 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 ('', '', 'a3664fbfed754a2aa371cd2a3f3419f6', '', '', '2018-08-14 17:02:06', '', 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 ('', '', '7b6223251c9d4798ad4a56f19873cd82', '', '', '2018-08-15 09:32:49', '', 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 ('', '', 'ff4b2c4c331c47c0b320d1dbaa7abf49', '', '', '2018-08-13 18:30:11', '', 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 ('', '', 'c425ac1dbe354a43b56186a54cf624ac', '', '', '2018-08-07 17:48:40', '', 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 ('', '', '7a7fd66631bd486f8f9f255d206796af', '', '', '2018-07-13 16:48:47', '', 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 ('', '', '8e3c01fd6435471db7f28508713923c1', '', '', '2018-08-11 10:50:32', '', 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) (ALL就是全表扫描)
(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 | | Using index condition |
+----+-------------+-----------+------+---------------+-------------+---------+-------+------+-----------------------+
1 row in set (0.00 sec)
MySQL数据库优化_索引的更多相关文章
- mysql数据库优化之索引的维护和优化
这里是一个工具,即pt-duplicate-key-checker工具 用来检查重复及冗余的索引 用法如下:pt-duplicate-key-checker -uroot -p密码 -h127. ...
- mysql数据库优化课程---17、mysql索引优化
mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...
- mysql数据库优化课程---5、要索引和不要索引的区别是什么
mysql数据库优化课程---5.要索引和不要索引的区别是什么 一.总结 一句话总结: 索引速度快,就是查表的时候,操作的话设置索引就好了 1.数据库设计的时候不允许字段为null的好处是什么? nu ...
- Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)
转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- mysql 数据库优化第一篇(基础)
Mysql数据库优化 1. 优化概述 存储层:存储引擎.字段类型选择.范式设计 设计层:索引.缓存.分区(分表) 架构层:多个mysql服务器设置,读写分离(主从模式) sql语句层:多个sql语句都 ...
- 关于MySQL数据库优化的部分整理
在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
随机推荐
- 【NLP】大白话讲解word2vec到底在做些什么
转载自:http://blog.csdn.net/mylove0414/article/details/61616617 词向量 word2vec也叫word embeddings,中文名“词向量”, ...
- jquery 循环绑定click的问题
之前循环数据,通过live绑定click, 发觉每个click绑定的链接参数都是一样的. 后来改用 直接的 click绑定,就好了. $.each(ship.PPRList, function (i, ...
- 怎么用Verilog描述双向IO口
在很多情况下,需要使用双向IO.不过最好谨慎使用,在top层使用.网上很多描述的代码甚至是不可以综合并且有语法错误的,还是老实自己写个模块吧. 如果你需要一个口既做输入端口也做输出端口,那么你就需要去 ...
- poi的cellstyle陷阱,样式覆盖
问题 cell.getCellStyle().setFont(font); 这句话本来只是想设置这一个单元格cell的字体样式,但是实际上却影响了很多个单元格的样式. 问题出在了,Excel模板中这些 ...
- rar自动压缩备份
rem ******MySQL backup start********@echo offforfiles /p "D:\备份\发布软件备份" /m backup_*.sql -d ...
- 【CodeForces706E】Working routine(二维链表)
BUPT2017 wintertraining(15) #6B 题意 q次操作,每次把两个给定子矩阵交换,求最后的矩阵.(2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) 题解 用R[ ...
- 【LOJ6036】编码(2-sat)
[LOJ6036]编码(2-sat) 题面 LOJ 题解 很显然的一个暴力: 枚举每个串中的?是什么,然后把和它有前缀关系的串全部给找出来,不合法的连边处理一下,那么直接跑\(2-sat\)就做完了. ...
- 每天一个Linux命令(03):du命令
du命令 今天找开发定位问题,看到他使用了这个命令,查看文件,之前知道df,所以今天的每天系列把这命令 du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空 ...
- windows7安装docker
因为本机已经安装了git,所以这里取消勾选 配置环境变量 进入到D:\DockerToolbox 将D:\DockerToolbox下的boot2docker.iso 复制到C:\Users\my\. ...
- noiac26 T1 (并查集)
考虑计算每个位置的数作为最小值时有多少种情况 方便起见,以位置为第二关键字比较大小,这样就不会出现“相同的”数 可以方便地计算出以i位置为最小值的区间端点的可行位置:[A,i],[i,B] 这是我选的 ...