MYSQL Left Join优化(10秒优化到20毫秒内)

yizhihongxing

MySQL Left Join优化是对左连接查询效率的优化,可以将查询效率从10秒大幅提高到20毫秒内。该方法包括以下几个步骤:

1. 调整SQL查询语句结构

将SQL查询语句的先后顺序进行调整,将嵌套子查询的表移到外部进行查询。示例如下:

SELECT t1.id, t2.name FROM t1 LEFT JOIN (SELECT id, name FROM t2) t2 ON t1.id = t2.id;

改为:

SELECT t1.id, t2.name FROM t1 LEFT JOIN t2 ON t1.id = t2.id;

2. 关键词放置的位置调整

将LEFT JOIN关键词放置在查询语句的开头。示例如下:

SELECT t1.id, t2.name FROM t1, t2 WHERE t1.id = t2.id(+);

改为:

SELECT t1.id, t2.name FROM t1 LEFT JOIN t2 ON t1.id = t2.id;

3. 查询过程的优化

对查询过程进行优化,采用EXPLAIN语句对查询进行分析和优化。示例如下:

EXPLAIN SELECT t1.id, t2.name FROM t1 LEFT JOIN t2 ON t1.id = t2.id;

示例1

比如有表A记录1000条记录,表B记录10000条记录,表A与B之间有一个关联的外键,现在要查询出表A和表B的交集记录。

SELECT * FROM A LEFT JOIN B ON A.id = B.A_id WHERE A.id IN (1, 2, 3, ..., 1000);

根据上述MySQL Left Join优化攻略,将查询语句改为:

SELECT * FROM A INNER JOIN B ON A.id = B.A_id WHERE A.id IN (1, 2, 3, ..., 1000);

这样查询就会快很多。

示例2

比如有表A记录1000条记录,表B记录10000条记录,表A与B之间有一个关联的外键,现在要查询出表B中A_id为1,2,3,...,1000的记录。

SELECT * FROM B LEFT JOIN A ON A.id = B.A_id WHERE A.id IN (1, 2, 3, ..., 1000);

根据上述MySQL Left Join优化攻略,将查询语句改为:

SELECT * FROM B INNER JOIN A ON A.id = B.A_id WHERE A.id IN (1, 2, 3, ..., 1000);

这样查询就会更快。

在实际应用中,可根据具体情况选择最适合的优化方法,以提高查询效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MYSQL Left Join优化(10秒优化到20毫秒内) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • <经验杂谈>Mysql中字符串处理的几种处理方法concat、concat_ws、group_concat

    Mysql中字符串处理的几种处理方法concat、concat_ws、group_concat以下详情: MySQL中concat函数使用方法:CONCAT(str1,str2,…)   返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二…

    MySQL 2023年4月13日
    00
  • 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法

    今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。 其实,问题的场景,非常简单: 就是需要查询出上图的数据,红框是从 项目产品表 中查询的2个字段,绿框是从与项目产品表关联的 文章表 中查询出的1个字段。我希望实现的效果是,获取到项目产品对应的文章提交人数,即该项目产品,有多少人提交了文章。看似很…

    MySQL 2023年4月12日
    00
  • mysql索引–普通索引,唯一索引,主键索引,参照完整性约束,数据完整性约束

    — 方法1:create index– 对employee表的员工部门号列创建普通索引depart_ind — create index depart_ind on employees(员工部门号); — 对employee表的姓名和地址列创建复合索引ad_ind;– create index ad_ind on employees(姓名,地址);…

    MySQL 2023年4月22日
    00
  • MySQL命令行登入的方式有哪些

    这篇“MySQL命令行登入的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL命令行登入的方式有哪些”文章吧。 方法一: 开始菜单 -> 所有程序 -> MySQL -> MySQL Server 8.0 -&…

    MySQL 2023年4月14日
    00
  • 详解使用navicat连接远程linux mysql数据库出现10061未知故障

    问题描述 当使用Navicat连接远程Linux上的MySQL数据库时,可能会遇到10061未知故障,导致无法连接到数据库。本篇攻略将详细讲解该问题的原因和解决方法。 原因分析 该问题的原因是因为MySQL服务器默认不允许远程访问。为了保证安全性,MySQL只允许本地客户端进行连接访问。因此如果需要远程连接MySQL,需要进行一些额外的配置。 解决方案 步骤…

    MySQL 2023年5月18日
    00
  • MySQL利用索引优化ORDER BY排序语句的方法

    当处理大量数据的排序时,MySQL使用ORDER BY语句很容易变得非常慢。这时,可以使用索引来优化ORDER BY语句,以提高查询速度。 以下是使用索引优化ORDER BY语句的步骤: 确定需要进行排序的列以及排序方向。 如果需要对多列排序,则可以将这些列依次添加到排序语句中。此外,可以限制需要排序的结果数量。 创建适当的索引。 在决定创建索引之前,可以使…

    MySQL 2023年5月19日
    00
  • MySql登录时闪退的快速解决办法

    MySql登录时闪退的快速解决办法 问题描述 在使用 MySql 时,当尝试进行登录时,可能会遇到闪退的情况,导致无法登录。这种情况一般是由于 MySql 服务未能正常启动导致的。本文将介绍如何快速解决这一问题。 解决办法 方法一:启动 MySql 服务 第一种解决办法是启动 MySql 服务。在开始之前,请确保您已经正确安装了 MySql。 按下“Win键…

    MySQL 2023年5月18日
    00
  • springboot 多数据源 实例(sybase、mysql数据库)(上)

    最近项目 需要用到 sybase(sql anywhere)、mysql 数据库 两边数据交互 。由于之前对sybase 数据库一点不懂 踩了许多坑 特意记下: 连接 sybase 客户端需要用到 SQL Central 17.0 (64-bit) 这个工具; 接下来我会一步一步详细介绍: 1.连接远程sybase 数据库 首先要配置odbc: 在win搜索…

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部