MySQL索引优化(索引两表优化案例)
建表SQL
- CREATE TABLE IF NOT EXISTS `class` (
- `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
- `card` INT(10) UNSIGNED NOT NULL,
- PRIMARY KEY (`id`)
- );
- CREATE TABLE IF NOT EXISTS `book` (
- `bookid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
- `card` INT(10) UNSIGNED NOT NULL,
- PRIMARY KEY (`bookid`)
- );
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
- INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
# 下面开始explain分析
EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card;
#结论:type 有All
# 添加索引优化
ALTER TABLE `book` ADD INDEX Y ( `card`);
# 第2次explain
EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card;
#可以看到第二行的 type 变为了 ref,rows 也变成了优化比较明显。
#这是由左连接特性决定的。LEFT JOIN 条件用于确定如何从右表搜索行,左边一定都有,
#所以右边是我们的关键点,一定需要建立索引。
# 删除旧索引 + 新建 + 第3次explain
DROP INDEX Y ON book;
ALTER TABLE class ADD INDEX X (card);
EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card;
MySQL索引优化(索引两表优化案例)的更多相关文章
- SQL精华总结索引类型优化SQL优化事务大表优化思维导图❤️
索引类型 从数据结构角度: B+树索引, hash索引,基于哈希表实现,只有全值匹配才有效.以链表的形式解决冲突.查找速度非常快 O(1) 全文索引,查找的是文本中的关键词,而不是直接比较索引中的值, ...
- mysql实战优化之三:表优化
对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...
- Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join
在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(i ...
- MYSQL一对多,两表查询合并数据
select a.askid,a.title,GROUP_CONCAT(b.message SEPARATOR '----') as content from gg_ask as a join gg_ ...
- MySQL进阶之MySQL索引以及索引优化
本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- MySQL 大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
随机推荐
- phpcms v9 更改首页
phpcms v9的默认首页是(域名/index.php?m=content&c=index&a=init)那为什么你直接敲一个域名它就自己进 去了呢,其实在caches-->c ...
- Proxy-代理器(预计vue3.0实现双向绑定的方式)
todo 常见的基于数据劫持的双向绑定有两种实现,一个是目前Vue在用的Object.defineProperty,另一个是ES2015中新增的Proxy,而Vue的作者宣称将在Vue3.0版本后加入 ...
- 微信小程序 API 界面 (2)
由于每个 API 参数:对象的属性都有 success,fail,complete,所以在这个提前介绍,就不再每个API 上写了 success:类型 函数 接口调用成功的回调函数 fail:类型 函 ...
- Flask中的request模板渲染Jinja以及Session
Flask中的request与django相似介绍几个常用的以后用的时候直接查询即可 1.request from flask import request(用之前先引用,与django稍有不同) r ...
- leetcode 回文二叉树
C++最简单的方法,遍历存在vector<int> ivec容器中,然后头尾对应比较 O(n)时间,O(n)空间 /** * Definition for singly-linked li ...
- python - del 方法
转自:http://blog.csdn.net/love1code/article/details/47276683 python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮 ...
- WPF使用BindingListCollectionView 和 ListCollectionView 视图排序集合
当将一个集合或DataTable绑定到ItemsControl控件时,在后对台会自动地创建数据视图,这个视图位于数据源和绑定的控件之间,数据视图是进行数据源的窗口.它跟踪当前项,并且提供各种功能,如排 ...
- springboot 使用外置tomcat启动
pom.xml 如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- Jmeter接口测试系列之判断测试结果
在使用jmeter进行接口测试时,我们需要根据测试用例判断其测试结果是否一致,判断其执行是否成功. 在jmeter中也可以使用响应断言去判断,但是有时我们需要根据不同的用例,其判断条件不同,所以这里我 ...
- 基于python+requests的简单接口测试
在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...