首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用STRAIGHT_JOIN 优化inner join查询排序索引问题

项目里有条sql语句使用inner join 语句 但是在增加了order by 左表.字段 desc 后效率非常慢 查询explain 如下: 左表字段last_follow_time是有索引的,...排序时但是并没有走索引,出现了Using temporary; Using filesort 这是因为排序时没有使用左表的字段索引,我们可以强制使用左表作为主表,就可以使用索引了 STRAIGHT_JOIN...替换 inner join,就可以解决问题 总的来说STRAIGHT_JOIN只适用于内连接,因为left join、right join已经知道了哪个表作为驱动表,哪个表作为被驱动表,比如left...而STRAIGHT_JOIN就是在内连接中使用,而强制使用左表来当驱动表,所以这个特性可以用于一些调优,强制改变mysql的优化器选择的执行计划。...(也就是说STRAIGHT_JOIN实际上是INNER JOIN的强制指定左表作为驱动表,而不是让mysql优化器去判断选择

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

软件测试|教你学会SQL INNER JOIN使用

而其中最常见的连接操作是 INNER JOIN。本文将详细介绍 INNER JOIN 的概念、语法用法,以及一些实际应用示例。...INNER JOIN 的语法INNER JOIN 的语法如下所示:SELECT 列名FROM 表1INNER JOIN 表2ON 表1.列 = 表2.列;在这个语法中,我们使用 SELECT语句来选择需要返回的列...然后使用INNER JOIN 关键字连接第一个表第二个表。ON关键字后面指定连接条件,即用于比较两个表中相同列的列名。...自连接:当一个表包含与自身相关的信息时,可以使用 INNER JOIN 将表与自身连接起来。子查询的连接:可以将 INNER JOIN 与子查询结合使用,以在连接操作中使用子查询的结果。...理解INNER JOIN的用法将有助于您在处理关系型数据库时进行更复杂有价值的数据查询分析。

22710

软件测试|教你学会SQL INNER JOIN使用

而其中最常见的连接操作是 INNER JOIN。本文将详细介绍 INNER JOIN 的概念、语法用法,以及一些实际应用示例。...INNER JOIN 的语法INNER JOIN 的语法如下所示:SELECT 列名FROM 表1INNER JOIN 表2ON 表1.列 = 表2.列;在这个语法中,我们使用 SELECT语句来选择需要返回的列...然后使用INNER JOIN 关键字连接第一个表第二个表。ON关键字后面指定连接条件,即用于比较两个表中相同列的列名。...自连接:当一个表包含与自身相关的信息时,可以使用 INNER JOIN 将表与自身连接起来。子查询的连接:可以将 INNER JOIN 与子查询结合使用,以在连接操作中使用子查询的结果。...理解INNER JOIN的用法将有助于您在处理关系型数据库时进行更复杂有价值的数据查询分析。

18820

如何在 SQL 中使用 LEFT、RIGHT、INNER、OUTER、FULL SELF JOIN

本文介绍如何使用 SQL 来连接表。 SQL JOIN 的类型 左连接、内连接、完全连接、自连接交叉连接是其他五种主要连接类型。 为了与数据库连接,我们必须在语句中显式或隐式地提供连接类型。...这是通过使用诸如“LEFT JOIN”、“INNER JOIN“FULL OUTER JOIN”等术语来实现的。 每个类别都有自己的一组应用程序。 希望下面的比较表可以帮助您识别它们的小差异。...因为 RIGHT JOIN 的结果可以通过在 LEFT JOIN 中交换两个连接的表名来实现,所以很少使用 RIGHT JOIN。...考虑如下的员工表: image.png 现在,上面解释的查询将产生如下结果: image.png 结论 这篇文章最重要的收获是 SQL JOIN可以分解为三个步骤: 选择您要使用的表特征。...判断join的状态 从左连接、内连接、自连接完全连接中选择合适的连接类型。 我希望通过阅读这篇文章,您将能够通过合并表来提高您的基本 SQL 能力并执行更复杂的分析。

1.9K40

left join-on-and 与 left join-on-where inner join on 加条件where加条件的区别

where 是全部连接完生成临时表后,再根据条件过滤 on 优先级比 where 高,因此,理论上 on-and 写法执行效率比 on-where 高,速度更快 inner-join 时,不管是对左表还是右表进行筛选...,on-and on-where 都会对生成的临时表进行过滤 2....在left join下,两者的区别: on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (tb_user) 的行。...where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。 在多表查询时,on 比 where 更早起作用。...实例演示 第一步:新建2张表并插入数据 新建2张表:用户表(tb_user)、用户得分表(tb_score) 表 tb_user tb_score 数据 第二步:执行查询语句 (1)执行 left-join-on-and

1.7K30

SQL学习笔记之SQL中INNER、LEFT、RIGHT JOIN的区别用法详解

0x00 建表准备 相信很多人在刚开始使用数据库的INNER JOIN、LEFT JOINRIGHT JOIN时,都不太能明确区分正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这三者的区别...首先,我们创建示例数据库表。同时也要明确一个概念:A INNER/LEFT/RIGHT JOIN B操作中,A表被称为左表,B表被称为右表。...0x01 INNER JOIN操作 首先,我们看看INNER JOIN操作,我们写个SQL语句,查询学生表中哪些学生受过处分: ?...在两表中都有,所以我们可以得出INNER JOIN操作的作用是: INNER JOIN:根据ON字段标识出来的条件,查出关联的几张表中,符合该条件的记录,合并成一个查询结果集。...0x04 总结 A INNER JOIN B ON……:内联操作,将符合ON条件的A表B表结果均搜索出来,然后合并为一个结果集。

1.1K20

使用group by rollupgroup by cube后的辅助函数

本文主要介绍,报表在使用group by rollupgroup by cube后的辅助函数。...GROUPING函数处理汇总结果(在使用group by rollupgroup by cube后的结果集)中的空值。...、Group by  Grouping sets解决的问题: 更加灵活的处理一些报表的统计工作,因为使用group by rollup group by cube都是固定格式的统计报表模式,当你给定三个需要分组统计的字段...union all一下,后者则是通过类似选择排序的方式联合结果集(不理解的话,参考哥前面的随笔),这两种统计模式不够灵活。...3、GROUP BY ,CUBE 或ROLLUP 中同时使用一列的处理 i、问题:在日常开发中可能会存在GROUP BY 或者GROUP BY CUBE 或者GROUP BY ROLLUP或者它们中组合使用到同一列的情况

1.7K70

十、GROUP BY HAVING 的使用

这时我们就可以使用 group by 语句来解决这类需求。...从字面上来理解,group by 表示根据某种规则对数据进行分组,他必须配合聚合函数进行使用,对数据进行分组后可以进行 count、sum、avg、max min 运算。...aggregate_function:表示聚合函数 group by :可以对一列或者多列进行分组 例如: 查询出全校有多少名男学生女学生 select sex, count(*) from...student group by sex; 查询每个班级有多少学生 select class, count(*) from student group by class; 查询每个门店员工薪资总和 select...dept,sum(salary) from employee group by dept; 二、having 的使用 在 SQL 中增加 HAVING 子句原因是, WHERE 关键子无法与聚合函数一起使用

98410

如何在人大金仓数据库中使用 INNER JOIN 并自定义ON的连接条件

本文将介绍如何在 KingbaseES 中使用 INNER JOIN ON 并自定义连接条件,具体示例将展示如何去掉连接字段的第一个字符。...示例表结构 为了演示如何在 INNER JOIN 中自定义连接条件,我将创建两张示例表 table_a table_b,并插入一些示例数据。...使用 INNER JOIN ON 自定义连接条件 如果是正常的数据是table_a.b 等于 table_b.b 字段值的,就可以这样写 SELECT a.*, b.* FROM table_a a INNER...使用 RIGHT 函数 SELECT a.*, b.* FROM table_a a INNER JOIN table_b b ON a.b = RIGHT(b.b, LENGTH(b.b) - 1);...是可以实现预期的效果 总结 本文介绍了如何在人大金仓数据库中使用 INNER JOIN 并自定义连接条件,通过示例演示了如何去掉连接字段的第一个字符。

13410

SQL必知必会总结2-第8到13章

BY vend_id HAVING COUNT(*) >= 2; -- 分组后再执行,找出数目大于2的数据 分组排序 ORDER BY GROUP BY的差异: ORDER BY GROUP BY...对产生的输出排序 对行分组,但输出可能不是分组的顺序 任意列都可以使用(非选择的列也可以使用) 只可能使用选择列或者表达式列,而且必须使用每个选择列表达式 不一定需要 如果聚集函数一起使用列,则必须使用...是 FROM 从中检索数据的表 仅在从表选择数据时使用 WHERE 行级过滤 否 GROUP BY 分组说明 仅在按照组计算聚集时使用 HAVING 组级过滤 否 ORDER BY 输出排序顺序 否...笔记:返回笛卡尔积的联结,也称做叉联结cross join 内联结inner join 使用最广泛的联结是等值联结,也称之为内联结inner join。...FROM Customers AS C INNER JOIN Orders ON C.cust_id = O.cust_id -- 关联两个表 GROUP BY Customers.cust_id

2.3K21

MYSQL基本操作-select 查询语句【续】

文章目录 前言 聚合函数 最小值(min) 数量(count) 总和(sum) 平均值(avg) 分组查询 简单分组 分组排序 统计功能分组查询 内连接 为数据表使用别名 外连接 自连接 联合查询 all...即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选 需要注意havingwhere...join关键字连接—使用inner join SELECT FROM INNER JOIN [ON子句] – inner join通过 on 来设置条件表达式,如果没有加...on的话,inner joincross join是相同的 – cross join … on inner join … on 其实效果也是一样的(但在标准sql中,cross join是不支持...on的,只是Mysql支持) – inner join 可以连接 ≥ 两个的表 – inner join 也可以使用 where 来指定连接条件,但是 inner join … on 是官方标准写法

1.7K40
领券