mysql优化(关联查询优化)
1.准备数据
#分类
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)));
2.left join左外连接
看这个分析结果发现:在 class 表上添加的索引起的作用不大。结论- **小表驱动大表**- 小表:相对来说记录较少的表- 大表:相对来说记录较多的表
- 驱动方式识别- left join:左边驱动右边(此时把小表放在左边)- right join:右边驱动左边(此时把小表放在右边)
- 加索引的方式:通常建议在大表(被驱动)的表加索引,效率提升更明显。
- 原因:- 原因1:被驱动表加了索引之后,收益更大。从 ALL -> ref- 原因2:外连接首先读取驱动表的全部数据,被驱动只读取满足连接条件的数据。
3、inner join:MySQL会自动根据表中的数据选择驱动表
4.总结:
- 保证被驱动表的 join 字段被索引。join 字段就是作为连接条件的字段。
- left join 时,选择小表作为驱动表(放左边),大表作为被驱动表(放右边)
- inner join 时,mysql 会自动将小结果集的表选为驱动表。
- 子查询尽量不要放在被驱动表,衍生表建不了索引
- 能够直接多表关联的尽量直接关联,不用子查询
mysql优化(关联查询优化)相关推荐
- Mysql分页关联查询优化
以下内容参考<高性能Mysql> 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引.在创建索引的时候就要考虑到关联的顺序. 当表 ...
- MySQL - Join关联查询优化 --- NLJ及BNL 算法初探
文章目录 生猛干货 Demo Table 表关联常见有两种算法 嵌套循环连接 Nested-Loop Join(NLJ) 算法 (NLP) 定义 示例 执行过程 规律 基于块的嵌套循环连接 Block ...
- 数据库面试题【十八、优化关联查询优化子查询优化LIMIT分页优化UNION查询优化WHERE子句】
优化关联查询: 确定ON或者USING子句中是否有索引. 确保GROUP BY和ORDER BY只有一个表中的列,这样MySQL才有可能使用索引. 优化子查询: 用关联查询替代 优化GROUP BY和 ...
- MySQL优化关联查询
①确保on或者using自居中的列上有索引,在创建索引的时候就要考虑到关联的顺序. ②确保任何的group by和order by中的表达式只涉及到一个表中的列,这样MySQL才有可能使用索引来优化这 ...
- mysql优化---订单查询优化(2):异步分页处理
订单分页查询: 老的代码是顺序执行查询数据和计算总记录数,但是如果条件复杂的话(比如关联子表)查询的时间要超过20s种 public static PagedList<Map<String ...
- mysql索引优化 - 多表关联查询优化
1 left join EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card; LEFT JOIN条件用于确定如何从 ...
- 数据库查询语句慢如何优化_常见Mysql的慢查询优化方式
1 概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句. 具体环境中,运行时间超过long_query_time值的SQL语句,则 ...
- mysql优化php面试_php面试专题---18、MySQL查询优化考点
php面试专题---18.MySQL查询优化考点 一.总结 一句话总结: 慢查询:查找分析查询速度慢的原因 数据访问:优化查询过程中的数据访问 长难句:优化长难的查询语句 特定类型:优化特定类型的查询 ...
- 《MySQL高级篇》八、索引优化与查询优化
文章目录 1. 数据准备 2. 索引失效案例 2.1 全值匹配我最爱 2.2 最左匹配原则 2.3 主键插入顺序 2.4 计算.函数.类型转换(自动或手动)导致索引失效 2.5 范围条件右边的列索引失 ...
- MySQL基础(二十八)索引优化与查询优化
都有哪些维度可以进行数据库调优?简言之: 索引失效.没有充分利用到索引--索引建立 关联查询太多JOIN (设计缺陷或不得已的需求)--SQL优化 服务器调优及各个参数设置(缓冲.线程数等)---调整 ...
最新文章
- R语言广义线性模型函数GLM、广义线性模型(Generalized linear models)、GLM函数的语法形式、glm模型常用函数、常用连接函数、逻辑回归、泊松回归、系数解读、过散度分析
- latex二元关系符号
- git submodule 的使用
- sleep 与 wait 区别
- 表盘时针的html代码,html5画布操作的简单学习-简单时钟
- GPU Shader 程序调试方法
- 异常检测算法之HBOS
- 直接拿来用!谷歌开源网络库 TensorNetwork,GPU 处理提升 100 倍
- C#基础学习第一天(.net菜鸟的成长之路-零基础到精通)
- 为啥春节抢红包总不是运气王?看完微信抢红包算法你就明白了
- MIMOl信道估计基本原理
- 3行代码 为你的网站博客添加萌萌哒可爱二次元女动漫玩偶人物(看板娘)
- Elasticsearch Field Options Norms
- win10 uwp 打电话
- sheet_name
- 网站怎么被搜索引擎快速收录?
- 【语音隐藏】基于matlab小波变换DWT结合离散余弦变换DCT音频数字水印嵌入提取【含Matlab源码 2131期】
- 车载以太网 - SomeIP - 详细解析 - 02
- hadoop自定义机架实现-08
- 【GDOI2017模拟11.7】太阳神