iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库中如何使用LEFT JOIN优化多个子查询
  • 358
分享到

数据库中如何使用LEFT JOIN优化多个子查询

2024-04-02 19:04:59 358人浏览 八月长安
摘要

小编给大家分享一下数据库中如何使用LEFT JOIN优化多个子查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.SQL1OL

小编给大家分享一下数据库中如何使用LEFT JOIN优化多个子查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.SQL1

OLD:

SELECT COUNT (1) num
  FROM (  SELECT t1.*
            FROM t_asset t1
           WHERE     1 = 1
                 AND t1.TYPE = 0
                 AND (   t1.status IN (1,
                                       10,
                                       11,
                                       12,
                                       100)
                      OR (EXISTS
                             (SELECT b.resource_id
                                FROM t_asset_file b
                               WHERE     t1.resource_id = b.asset_code
                                     AND t1.status IN (3, 4, 8)
                                     AND b.status IN (1,
                                                      10,
                                                      11,
                                                      12))))
                 AND (   EXISTS
                            (SELECT 1
                               FROM t_asset_file a1
                              WHERE     t1.resource_id = a1.asset_code
                                    AND (   a1.content_status = 1
                                         OR a1.content_status = 4))
                      OR NOT EXISTS
                            (SELECT 1
                               FROM t_asset_file a1
                              WHERE t1.resource_id = a1.asset_code))
        ORDER BY t1.create_time DESC, t1.resource_id) a;

优化方向: 合并多个t_asset_file子查询

优化方法: 使用left join 来代替子查询,把关联列放在group by中,将子查询中不同条件使用case when

SELECT COUNT (1) num
  FROM (  SELECT t1.*
            FROM t_asset t1,
                 (  SELECT asset_code,
                           MAX (CASE
                                   WHEN status IN (1,
                                                   10,
                                                   11,
                                                   12)
                                   THEN
                                      1
                                   ELSE
                                      0
                                END)
                              status,
                           MAX (
                              CASE
                                 WHEN content_status = 1 OR content_status = 4
                                 THEN
                                    1
                                 ELSE
                                    0
                              END)
                              content_status
                      FROM t_asset_file
                  GROUP BY asset_code) t2
           WHERE     t1.resource_id = t2.asset_code(+)
                 AND t1.TYPE = 0
                 AND (   t1.status IN (1,
                                       10,
                                       11,
                                       12,
                                       100)
                      OR (t1.status IN (3, 4, 8) AND t2.status(+) = 1))
                 AND ( (t2.content_status(+) = 1) OR (t2.asset_code IS NULL))
        ORDER BY t1.create_time DESC, t1.resource_id) a;

2.SQL2

OLD:

  SELECT m.khbh, d.wzzbm, wmsys.wm_concat (m.rkid) rkids
    FROM m@dblink m, d@dblink d
   WHERE     m.rkid = d.rkid
         AND m.rkzt = 2
         AND m.ssny < '201311'
         AND m.zxdid IS NULL
         AND (   NOT EXISTS
                        (SELECT 1
                           FROM m@dblink m1, d@dblink d1
                          WHERE     m1.rkid = d1.rkid
                                AND m1.zxdid = m.rkid
                                AND d1.wzzbm = d.wzzbm
                                AND m1.rkzt = 3)
              OR (SELECT SUM (d1.xysl)
                    FROM m@dblink m1, d@dblink d1
                   WHERE     m1.rkid = d1.rkid
                         AND m1.zxdid = m.rkid
                         AND d1.wzzbm = d.wzzbm
                         AND m1.rkzt = 3) < d.xysl)
GROUP BY m.khbh, d.wzzbm;

优化方向:合并重复的子查询

  SELECT m.khbh, d.wzzbm, wmsys.wm_concat (m.rkid) rkids
    FROM m@dblink m, d@dblink d,
		(select m1.zxdid,d1.wzzbm,
				sum(d1.xysl) sum_xysl
		 from m@dblink m1,d@dblink d1
		 where m1.rkzt = 3
		 and m1.rkid = d1.rkid
		 group by m1.zxdid,d1.wzzbm) z
   WHERE     m.rkid = d.rkid
         AND m.rkzt = 2
         AND m.ssny < '201311'
         AND m.zxdid IS NULL
		 and z.zxdid=m.rkid
		 and z.wzzbm=d.wzzbm
         AND ( (z.zxdid is null and z.wzzbm is null)
              OR z.sum_xysl < d.xysl)
GROUP BY m.khbh, d.wzzbm;

3.SQL3

OLD:

select m.col1,d.col2,wmsys.wm_concat(m.col3) col3s
from m,d
where m.col3=d.col3
and m.col6=2
and m.col7<'201312'
and m.col4 is null
and (not exists (select 1 from m m1,d d1 
				 where m1.col3=d1.col3
				 and m1.col4=m.col3
				 and d1.col2=d.col2
				 and m1.col7< '201312'
				 and m1.col6=3) or
	 (select sum(d1.col5)
	  from m m1,d d1
	  where m1.col3=d1.col3
	  and m1.col4=m.col3
	  and d1.col2=d.col2
	  and m1.col7<'201312'
	  and m1.col6=3)<d.col5)
group by m.col1,d.col2;

优化方向:

(1).主查询和子查询涉及表相同,并且条件有很多共同点,可以考虑合并。

(2).子查询结构相似,考虑使用left join来进行合并。

NEW:

with aa as(
select m.col1,d.col2,m.col3,m.col4,d1.col5 
from m,d
where m.col3=d.col3
and m.col6 in(2,3)
and m1.col7< '201312')
select aa.col1,aa.col2, wmsys.wm_concat(aa.col3) col3s
from aa,
	 (select col4,col2,sum(d1.col5) sum_col5
		from aa
	  where col6=3
	  group by col4,col2) bb
where aa.col3=bb.col4(+)
and aa.col2=bb.col2(+)
and aa.col4 is null
and aa.col6=2
and (bb.col4 is null or bb.sum_col5(+)<aa.col5)

以上是“数据库中如何使用LEFT JOIN优化多个子查询”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库中如何使用LEFT JOIN优化多个子查询

本文链接: https://www.lsjlt.com/news/64686.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库中如何使用LEFT JOIN优化多个子查询
    小编给大家分享一下数据库中如何使用LEFT JOIN优化多个子查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.SQL1OL...
    99+
    2024-04-02
  • 怎么在mysql中使用多个left join连接查询
    这期内容当中小编将会给大家带来有关怎么在mysql中使用多个left join连接查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql查询时需要连接多个表时,比如...
    99+
    2024-04-02
  • 数据库查询优化之子查询优化的示例分析
    这篇文章将为大家详细讲解有关数据库查询优化之子查询优化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 案例取所有不为掌门人的员工,按年龄分组!selec&#...
    99+
    2024-04-02
  • Laravel8中如何优化数据库查询
    这篇文章主要介绍了Laravel8中如何优化数据库查询的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Laravel8中如何优化数据库查询文章都会有所收获,下面我们一起来看看吧。    &nb...
    99+
    2023-06-29
  • 如何使用MySQL LEFT JOIN 来模拟MySQL MINUS 查询?
    由于我们无法在 MySQL 中使用 MINUS 查询,因此我们将使用 LEFT JOIN 来模拟 MINUS 查询。可以借助以下示例来理解:示例在此示例中,我们有两个表,即 Student_detail 和 Student_info,其内容...
    99+
    2023-10-22
  • 如何使用PHP数组来优化Laravel中的数据库查询?
    Laravel是一款流行的PHP框架,它提供了简洁而强大的语法,使开发人员能够快速构建可扩展的Web应用程序。在Laravel中,数据库查询是最常见的任务之一。然而,随着应用程序的增长,数据库查询的数量也会增加,这可能会导致性能问题。本文将...
    99+
    2023-08-25
    数组 shell laravel
  • MySQL数据库如何连接查询join
    今天小编给大家分享一下MySQL数据库如何连接查询join的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、连接查询的分类交...
    99+
    2023-07-02
  • Golang 技术性能优化中如何优化数据库查询?
    优化 go 中的数据库查询可以提升技术性能。可以通过使用索引、减少查询返回字段、使用批量查询和使用连接池来实现。通过优化字段选择,可以减少查询响应的大小,提高查询速度。 Go 中优化数...
    99+
    2024-05-12
    golang 数据库查询
  • 如何优化PHP中的数据库查询性能
    随着业务的不断扩大和数据的增加,数据库的查询性能已经成为了许多 PHP 应用程序开发人员的关注重点。优化数据库查询性能能够提升应用程序的整体性能和稳定性,使其更加适应高并发、大规模数据量等复杂的应用场景。本文将介绍一些优化 PHP 中的数据...
    99+
    2023-05-23
    性能调优 PHP性能优化 数据库查询优化
  • 如何使用PHP查询两个数据库
    PHP是一种主要用于服务器端的开源脚本语言,通常用于Web开发。它具有易学易用、开发效率高的优点,在网站开发中得到了广泛应用。在实际开发中,可能遇到需要查询多个数据库的情况,本文将介绍如何使用PHP查询两个数据库。一、连接数据库在PHP中,...
    99+
    2023-05-14
  • 如何使用 PHP 查询单个数据库
    PHP 是一种流行的编程语言,用于开发动态 Web 应用程序。在开发 Web 应用程序时,一般需要访问数据库以获取、存储和管理数据。PHP 可以轻松连接数据库并执行各种类型的查询。在 PHP 中,使用 MySQLi 和 PDO 中的一种来与...
    99+
    2023-05-14
  • Server数据库中怎么优化查询
    Server数据库中怎么优化查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Server数据库查询优化方法有哪些  1.尽量不要使用...
    99+
    2024-04-02
  • 如何优化 PHP 函数中数据库查询的性能?
    回答:优化 php 函数中的数据库查询性能至关重要。原因:不必要的重叠查询无效的索引无效的查询语法优化技巧:使用缓存优化索引使用适当的查询类型限制结果集利用 explain使用 prep...
    99+
    2024-04-24
    php 数据库优化
  • 如何使用PHP8中的Constructor Property Promotion来优化数据库查询操作?
    如何使用PHP8中的Constructor Property Promotion来优化数据库查询操作?引言:随着互联网的快速发展,大量的数据被存储在数据库中。而在Web应用中,数据库查询操作是非常常见的需求。然而,不规范的数据库查询操作可能...
    99+
    2023-10-22
    优化 PHP Constructor Property Promotion
  • thinkphp如何查询多个数据
    这篇文章主要介绍“thinkphp如何查询多个数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkphp如何查询多个数据”文章能帮助大家解决问题。thinkphp查询多个数据的方法:1、使用...
    99+
    2023-07-04
  • java查询数据库百万条数据,优化之:多线程+数据库
    java百万查询语句优化 业务需求 今天去面试时hr问了个关于大量数据查询的问题。 面试官:“我们公司是做数据分析的,每次需要从数据库中查询100万条数据进行分析,不能用分页,请问怎么优化sql或者java代码呢??” 如果用普通查询...
    99+
    2023-08-16
    java 数据库 servlet
  • 怎么理解Oracle数据库中的多表查询,分组查询,子查询
    本篇内容介绍了“怎么理解Oracle数据库中的多表查询,分组查询,子查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • MySQL中如何优化查询语句和数据库性能
    MySQL中优化查询语句和数据库性能可以采取以下措施: 使用合适的索引:为经常查询的列创建索引,可以加快查询速度。但要注意不要过度...
    99+
    2024-04-09
    MySQL
  • 如何在PHP项目中优化数据库查询性能?
    如何在PHP项目中优化数据库查询性能?在开发PHP项目时,数据库查询是一个非常常见且重要的操作。然而,随着数据量的增加和业务的复杂化,数据库查询性能的优化显得尤为重要。本文将介绍一些常见的数据库查询性能优化策略,以帮助开发人员提升PHP项目...
    99+
    2023-11-02
    查询优化 数据库索引 数据库缓存
  • PHP中如何优化数据库查询以提高性能?
    优化php中的数据库查询以提高性能,可通过以下方法:使用索引避免全表扫描。编写高效的查询,仅选择所需列并使用适当的连接和联接。使用缓冲查询存储查询结果以提高后续执行速度。限制结果集以减少...
    99+
    2024-05-06
    php 数据库优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作