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优化(关联查询优化)相关推荐

  1. Mysql分页关联查询优化

    以下内容参考<高性能Mysql> 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引.在创建索引的时候就要考虑到关联的顺序. 当表 ...

  2. MySQL - Join关联查询优化 --- NLJ及BNL 算法初探

    文章目录 生猛干货 Demo Table 表关联常见有两种算法 嵌套循环连接 Nested-Loop Join(NLJ) 算法 (NLP) 定义 示例 执行过程 规律 基于块的嵌套循环连接 Block ...

  3. 数据库面试题【十八、优化关联查询优化子查询优化LIMIT分页优化UNION查询优化WHERE子句】

    优化关联查询: 确定ON或者USING子句中是否有索引. 确保GROUP BY和ORDER BY只有一个表中的列,这样MySQL才有可能使用索引. 优化子查询: 用关联查询替代 优化GROUP BY和 ...

  4. MySQL优化关联查询

    ①确保on或者using自居中的列上有索引,在创建索引的时候就要考虑到关联的顺序. ②确保任何的group by和order by中的表达式只涉及到一个表中的列,这样MySQL才有可能使用索引来优化这 ...

  5. mysql优化---订单查询优化(2):异步分页处理

    订单分页查询: 老的代码是顺序执行查询数据和计算总记录数,但是如果条件复杂的话(比如关联子表)查询的时间要超过20s种 public static PagedList<Map<String ...

  6. mysql索引优化 - 多表关联查询优化

    1 left join EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card; LEFT JOIN条件用于确定如何从 ...

  7. 数据库查询语句慢如何优化_常见Mysql的慢查询优化方式

    1 概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句. 具体环境中,运行时间超过long_query_time值的SQL语句,则 ...

  8. mysql优化php面试_php面试专题---18、MySQL查询优化考点

    php面试专题---18.MySQL查询优化考点 一.总结 一句话总结: 慢查询:查找分析查询速度慢的原因 数据访问:优化查询过程中的数据访问 长难句:优化长难的查询语句 特定类型:优化特定类型的查询 ...

  9. 《MySQL高级篇》八、索引优化与查询优化

    文章目录 1. 数据准备 2. 索引失效案例 2.1 全值匹配我最爱 2.2 最左匹配原则 2.3 主键插入顺序 2.4 计算.函数.类型转换(自动或手动)导致索引失效 2.5 范围条件右边的列索引失 ...

  10. MySQL基础(二十八)索引优化与查询优化

    都有哪些维度可以进行数据库调优?简言之: 索引失效.没有充分利用到索引--索引建立 关联查询太多JOIN (设计缺陷或不得已的需求)--SQL优化 服务器调优及各个参数设置(缓冲.线程数等)---调整 ...

最新文章

  1. R语言广义线性模型函数GLM、广义线性模型(Generalized linear models)、GLM函数的语法形式、glm模型常用函数、常用连接函数、逻辑回归、泊松回归、系数解读、过散度分析
  2. latex二元关系符号
  3. git submodule 的使用
  4. sleep 与 wait 区别
  5. 表盘时针的html代码,html5画布操作的简单学习-简单时钟
  6. GPU Shader 程序调试方法
  7. 异常检测算法之HBOS
  8. 直接拿来用!谷歌开源网络库 TensorNetwork,GPU 处理提升 100 倍
  9. C#基础学习第一天(.net菜鸟的成长之路-零基础到精通)
  10. 为啥春节抢红包总不是运气王?看完微信抢红包算法你就明白了
  11. MIMOl信道估计基本原理
  12. 3行代码 为你的网站博客添加萌萌哒可爱二次元女动漫玩偶人物(看板娘)
  13. Elasticsearch Field Options Norms
  14. win10 uwp 打电话
  15. sheet_name
  16. 网站怎么被搜索引擎快速收录?
  17. 【语音隐藏】基于matlab小波变换DWT结合离散余弦变换DCT音频数字水印嵌入提取【含Matlab源码 2131期】
  18. 车载以太网 - SomeIP - 详细解析 - 02
  19. hadoop自定义机架实现-08
  20. 【GDOI2017模拟11.7】太阳神

热门文章

  1. 高科技公司的 CEO 要写代码吗?
  2. xp系统下如何安装windows phone 7的软件xap文件
  3. 让我们准备祭奠小米帝国
  4. 交友程序网站源码全套源码带APP源码+安装视频教程
  5. POP3邮件客户端程序
  6. 动易html编辑器漏洞,动易2006_SP6最新漏洞得到管理员密码
  7. 软件开发学什么编程语言好
  8. python烟花代码
  9. java爬虫视频教程_JAVA开发教程:java视频教程java爬虫实战项目 百度网盘
  10. 服务器(Windows镜像)自建git服务器超详细教程