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数据库优化_索引的更多相关文章

  1. mysql数据库优化之索引的维护和优化

    这里是一个工具,即pt-duplicate-key-checker工具 用来检查重复及冗余的索引 用法如下:pt-duplicate-key-checker  -uroot  -p密码  -h127. ...

  2. mysql数据库优化课程---17、mysql索引优化

    mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...

  3. mysql数据库优化课程---5、要索引和不要索引的区别是什么

    mysql数据库优化课程---5.要索引和不要索引的区别是什么 一.总结 一句话总结: 索引速度快,就是查表的时候,操作的话设置索引就好了 1.数据库设计的时候不允许字段为null的好处是什么? nu ...

  4. Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

    转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...

  5. MySQL性能优化:索引

    MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...

  6. mysql 数据库优化第一篇(基础)

    Mysql数据库优化 1. 优化概述 存储层:存储引擎.字段类型选择.范式设计 设计层:索引.缓存.分区(分表) 架构层:多个mysql服务器设置,读写分离(主从模式) sql语句层:多个sql语句都 ...

  7. 关于MySQL数据库优化的部分整理

    在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...

  8. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

随机推荐

  1. Java精品文章收藏

    1.JAVA进阶----ThreadPoolExecutor机制 待实践测试

  2. Android路径之Javascript基础-笔记

    一.Javascript概述(知道) a.一种基于对象和事件驱动的脚本语言 b.作用: 给页面添加动态效果 c.历史: 原名叫做livescript.W3c组织开发的标准叫ECMAscipt. d.特 ...

  3. 【HDU-6146】Pokémon GO(dp)

    百度之星2017复赛1003 HDU-6146 Pokémon GO 题意 两行n列,只能到相邻格子,可以斜着.求遍历的方案数. 题解 dp[i]从一个点出发遍历长度i最后回到这一列的方案数 dp2[ ...

  4. LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)

    题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...

  5. IT人员必须掌握的10项软技能

    现代企业的IT部门员工在具备技术能力的同时,还需要掌握一些软技能.现在来看这些软技能其实并不是什么新鲜事物,只是IT人员所需的这些软技能的范围与数量正在不断增加着. IT人员需要具备哪些技术能力,要取 ...

  6. BZOJ2406矩阵

    题目描述 题解 最大值最小,一眼二分没的说. 然后考虑建出这么个图,每行看做一个点,每列看做一个点,每个点看做一条连接行与列的边,源点向每行连s-mid__s+mid的边,行与列连L__R的边,列到汇 ...

  7. [SDOI2010]大陆争霸

    幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举击败杰森国 ...

  8. 使用item pipeline处理保存数据

    一个Item Pipeline 不需要继承特定基类,只需要实现某些特定方法,面向接口. class MyPipeline(object): def __init__(self): "&quo ...

  9. java 数组转字符串 字符串转数组

    字符串转数组 使用Java split() 方法 split() 方法根据匹配给定的正则表达式来拆分字符串. 注意: . . | 和 * 等转义字符,必须得加 \\.多个分隔符,可以用 | 作为连字符 ...

  10. A1087. All Roads Lead to Rome

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...