设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

8种你可能正在写错的SQL用法(9)

发布时间:2019-07-22 15:59 所属栏目:115 来源:佚名
导读:但是子查询 a 在我们的SQL语句中出现了多次。这种写法不仅存在额外的开销,还使得整个语句显的繁杂。使用 WITH 语句再次重写: WITHaAS ( SELECTresourceid FROMmy_distributed WHEREisdelete=0 ANDcusmanagercode=

但是子查询 a 在我们的SQL语句中出现了多次。这种写法不仅存在额外的开销,还使得整个语句显的繁杂。使用 WITH 语句再次重写:

  1. WITH a AS   
  2. (   
  3.          SELECT   resourceid   
  4.          FROM     my_distribute d   
  5.          WHERE    isdelete = 0   
  6.          AND      cusmanagercode = '1234567'   
  7.          ORDER BY salecode limit 20)  
  8. SELECT    a.*,   
  9.           c.allocated   
  10. FROM      a   
  11. LEFT JOIN   
  12.           (   
  13.                    SELECT   resourcesid, sum(ifnull(allocation, 0) * 12345) allocated   
  14.                    FROM     my_resources r,   
  15.                             a   
  16.                    WHERE    r.resourcesid = a.resourcesid   
  17.                    GROUP BY resourcesid) c   
  18. ON        a.resourceid = c.resourcesid 

总结

数据库编译器产生执行计划,决定着SQL的实际执行方式。但是编译器只是尽力服务,所有数据库的编译器都不是尽善尽美的。

上述提到的多数场景,在其它数据库中也存在性能问题。了解数据库编译器的特性,才能避规其短处,写出高性能的SQL语句。

程序员在设计数据模型以及编写SQL语句时,要把算法的思想或意识带进来。

编写复杂SQL语句要养成使用 WITH 语句的习惯。简洁且思路清晰的SQL语句也能减小数据库的负担 。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读