关于mysql的join

最近一直在困扰的mysql join的工作原理问题,公司不推荐使用多表查询,所以我探究一下join是怎么工作的

答案是不是的!

收藏

也就是说连表查询说order by group by的字段必须是驱动表里的。

我理解:left join左边表就是驱动表,right join右边表就是驱动表,inner join看explain 第一行为驱动表

背景:

users 表 866行数据 主键索引

user_city 35行数据 主键索引

1.explain select users.id from user_city left join users on users.id=user_city.`user_id`

驱动表user_city user_id没有索引,users.id主键索引

2.explain select users.id from user_city left join users on users.id=user_city.`id`

驱动表user_city id是主键索引,users.id主键索引

3.explain select users.id from user_city left join users on users.user_id=user_city.`id`

驱动表user_city id是主键索引,users.user_id没有索引

3.explain select users.id from user_city left join users on users.user_id=user_city.`id` where user_city.id<40

驱动表user_city id是主键索引,users.user_id没有索引 where条件id索引

4.explain select users.id from user_city left join users on users.user_id=user_city.`id` where user_city.user_id<1700

驱动表user_city id是主键索引,users.user_id没有索引 where条件user_id没有索引

5.这两个比较很重要,当连表排序的时候,orderby字段除了必须是驱动表的字段且有索引外,过滤条件on 也必须都使用到索引才可以,是都使用!

explain select users.id from user_city left join users on users.id=user_city.`id` order by users.id desc

都使用到了索引,但是orderby的不是驱动表的字段,肯定会出现Using temporary; Using filesort

6.explain select users.id from user_city left join users on users.id=user_city.`id` order by user_city.id desc

 都使用到了索引,orderby为驱动表字段,不会出现Using temporary; Using filesort

7.explain select users.id from user_city left join users on users.user_id=user_city.`id` order by user_city.id desc

 user_id没有索引,即使orderby字段为驱动表字段

补充一点

一般能用join肯定用join,因为吗、这样的话mysql就会自己判断选择合适的驱动表了

时间: 2024-10-20 08:13:56

关于mysql的join的相关文章

mysql的join操作

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

MySQL Full Join的实现

MySQL Full Join的实现 由于MySQL不支持FULL JOIN,以下是替代方法 left join + union(可去除反复数据)+ right join select * from A left join B on A.id = B.id (where 条件) union select * from A right join B on A.id = B.id (where条件);

MySQL的JOIN(三):JOIN优化实践之内循环的次数

这篇博文讲述如何优化内循环的次数.内循环的次数受驱动表的记录数所影响,驱动表记录数越多,内循环就越多,连接效率就越低下,所以尽量用小表驱动大表.先插入测试数据. CREATE TABLE t1 ( id INT PRIMARY KEY AUTO_INCREMENT, type INT ); SELECT COUNT(*) FROM t1; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ CREATE TABLE t2 (

MySQL INNER JOIN

Summary: in this tutorial, you will learn how to use MySQL INNER JOIN clause to select data from multiple tables based on join conditions. Introducing MySQL INNER JOIN clause The MySQL INNER JOIN clause matches rows in one table with rows in other ta

MySQL的JOIN(一):用法

JOIN的含义就如英文单词"join"一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), typeId INT ); SELECT * FROM t_blog; +----+-------+--------+ | id | title | typeId | +----+--

Mysql Nested-Loop Join Algorithms

MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种:(嵌套循环)  Nested-Loop Join Algorithm      一个简单的嵌套循环连接(NLJ)算法 从第一个表读取一行,然后传递给Join中的其他表依次读取,过程一直重复剩余的表都被Join. 假设在三个表t1,t2,t3做连接时: Table Join Type t1 range t2 ref t3 ALL 如下: for each row in t1 matching ran

MySQL的Join使用

在MySQL(以5.1为例)中,表连接的语法可以参见MySQL官方手册:MySQL官方手册-JOIN 在查询中,连接的语法类似 [sql] view plaincopy SELECT select_expr FROM table_references table_references(对表的引用)的定义如下(也可以看成连接表达式):(晕晕晕哈) [sql] view plaincopy table_references: table_reference [, table_reference] .

MYSQL中JOIN的用法

近期用phpcms v9做项目,初期没有问题,后期随着数据量的增大,phpcms v9后台出现的栏目更新不动的情况,初期我以为是程序的问题,进行了程序排查,没有发现任何问题,登录上centos服务器后free命令发现内存也没有满.瞬间感觉很蛋疼,不知如何处理,后来登录阿里云账号,发现更新栏目时,cpu使用率直接到达100%,xhell远程登录进入服务器后用top检测cpu使用率的情况,发现MySQL占用的cpu使用率的100%,直接登录进入MySQL数据库,输入show full process

Mysql的join语句

mysql超强功能之一:join # group by 必须放在 order by 和 limit之前,不然会报错 # 你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询. # JOIN 常用分为如下三类(但不仅仅只有这三类): # INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录:使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样) # LEFT JOIN(左连接):获取左

【MYSQL】JOIN

MYSQL 使用的图片来自http://coolshell.cn/articles/3463.html JOIN mysql> mysql> desc College; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | cnam