首页 > 数据库 >sql语句优化

sql语句优化

时间:2024-01-17 16:01:30浏览次数:28  
标签:语句 map JOIN WHERE 查询 sql 优化 ID pm

 SELECT  
                                             t.ID,
                                             t.ProjectNumber,    
                                             t.ProjectRequirement,
                                             t.ProjectDescription,
                                             t.ProjectTypeID,
                                             map.TypeName as ProjectTypeName,
                                             map.DepartmentID,
                                             map.DepartmentName,
                                             t.ProjectGoal,
                                             t.ProductLine,
                                             t.ProjectStatus,
                                             t.SortCode,
                                             t.IsFromInterface,
                                             t.EnabledMark,
                                             t.CreateDate,
                                             (SELECT ISNULL(COUNT(0),0) FROM ProjectManagementDetail pm WHERE pm.ProjectManagementID=t.ID AND pm.DeleteMark=0) AS ProjectCount
                                              FROM ProjectManagement t
                                              left join Design_ProjectTypeMap map on t.ProjectTypeID=map.ID
                                               WHERE 1=1 and t.DeleteMark=0 

这条查询语句的性能优化点较多,以下是一些常见的优化措施:

  1. 避免使用SELECT *语句,只选择需要的列,减少数据传输和处理的开销。

  2. 尽量使用INNER JOIN代替LEFT JOIN,因为INNER JOINLEFT JOIN效率更高。如果确实需要LEFT JOIN,可以考虑把过滤条件放在ON子句中,而不是在WHERE子句中。

  3. 使用表别名来增加可读性,并提高查询性能。

  4. 尽量避免使用子查询,可以将子查询转换为关联查询(JOIN)。

  5. 对于常用到的查询条件,可以创建索引来提高查询效率。

  6. 避免使用ISNULL函数,可以使用COALESCE函数代替。

  7. 可以使用查询计划(Query Plan)来查看查询语句的性能瓶颈,并进行调整。

针对以上建议,下面给出一个优化后的SQL语句供参考:

SELECT  
    t.ID,
    t.ProjectNumber,
    t.ProjectRequirement,
    t.ProjectDescription,
    t.ProjectTypeID,
    map.TypeName as ProjectTypeName,
    map.DepartmentID,
    map.DepartmentName,
    t.ProjectGoal,
    t.ProductLine,
    t.ProjectStatus,
    t.SortCode,
    t.IsFromInterface,
    t.EnabledMark,
    t.CreateDate,
    COALESCE(pm.ProjectCount, 0) AS ProjectCount
FROM 
    ProjectManagement t
    LEFT JOIN 
        ProjectTypeMap map ON t.ProjectTypeID = map.ID
    LEFT JOIN 
        (SELECT ProjectManagementID, COUNT(*) AS ProjectCount FROM ProjectManagementDetail WHERE DeleteMark = 0 GROUP BY ProjectManagementID) pm 
        ON t.ID = pm.ProjectManagementID
WHERE 
    t.DeleteMark = 0

 

标签:语句,map,JOIN,WHERE,查询,sql,优化,ID,pm
From: https://www.cnblogs.com/shy1766IT/p/17970219

相关文章

  • 安装MySql(rpm方式安装)
    下载rpm包地址:https://dev.mysql.com/downloads/mysql/下载这个:mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar解压tar-vxfmysql-8.0.35-1.el7.x86_64.rpm-bundle.tar-C<指定解压路径>进入解压路径执行安装以下程序/依赖,必须依次安装rpm-ivhmysql-community-common-8.0.3......
  • 常见错误记录之连接MySQL8.0(Navicate Premium 12,出现BigInteger错误)
    一、NavicatePremium12连接MySQL8.0包如下错误: 出错原因:mysql8之前的版本中加密规则为mysql_native_passwordmysql8以后的加密规则为caching_sha2_password解决方法:(1)更新navicat驱动来解决此问题(2)将mysql用户登录的加密规则常用第二种方法:1.用管理员权限打开cmd,输入mysql......
  • mysql 语句执行顺序
    MySQL语句的大致执行顺序如下:FROM:指定要查询的表。JOIN:根据指定的条件,将两个或多个表合并为一个结果集。WHERE:对查询结果进行筛选,只保留满足指定条件的行。GROUPBY:将结果集按照指定的列进行分组。WITHROLLUP:按照GROUPBY的列对结果集进行汇总,并添加一......
  • 修改MySQL 8.0的版本信息和登录信息,改成你自己的。
    修改MySQL8.0的版本信息和登录信息,改成你自己的。编译环境准备#yuminstallmake-y#yum-yinstallcentos-release-scl#yum-yinstalldevtoolset-9-gccdevtoolset-9-gcc-c++devtoolset-9-binutils#sclenabledevtoolset-9bash#echo"source/opt/rh/devtoolset-9/ena......
  • Mysql系列---【mysql创建用户和赋权】
    全文注意大小写,我用的mysql5.7.27版本,设置区分大小写。%:代表所有主机都可以连接;如果是localhost,表示只用sqlshell在本机能连接;如果是指定的ip,表示只有这个ip的主机才能连接。1.sqlshell登录root用户mysql-uroot-ppwd;2.创建数据库CREATEDATABASExxl_jobdb;3.创建x......
  • 无涯教程-SQL - ADDDATE()函数
    下表列出了可通过SQL使用的所有重要的与日期和时间相关的重要功能。RDBMS还支持其他各种功能。给定的列表基于MySQLRDBMS。Sr.No.Function&Description1ADDDATE()添加日期2ADDTIME()增加时间3CONVERT_TZ()从一个时区转换到另一个时区4CURDATE()返回当前日......
  • 千万级数据深分页查询SQL性能优化实践
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注对......
  • 无涯教程-SQL COUNT Function函数
    SQLCOUNT函数是最简单的函数,在计算预计由SELECT语句返回的记录数时非常有用。要了解COUNT函数,请考虑一个employee_tbl表,该表具有以下记录-SQL>SELECT*FROMemployee_tbl;+------+------+------------+--------------------+|id|name|work_date|daily_typ......
  • 千万级数据深分页查询SQL性能优化实践
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注......
  • MySQL的聚簇索引,非聚簇索引,主键索引,唯一索引和普通索引关系
    关系简述MySQL聚簇索引只有一个,优先primarykey,没有就是uniquekey,两个都没有,innoDB自动生成GEN_CLUST_INDEX。唯一索引有可能是非聚簇的,也有可能聚簇的。唯一索引能建多个,是非聚簇的,也能为空,能多个都是空,但是不能重复。和普通索引区别在于不能重复。如果建立了主键索引,那么......