sql语句优化,很着急,在线等,sql如下

问题描述

sql语句优化,很着急,在线等,sql如下

SELECT
t1.user_id AS user_id,
t1.user_name AS user_name,
t1.serv_num AS serv_num,
t1.create_date AS create_date,
t1.connect_type AS connect_type,
t1.login_device AS login_device,
t1.login_time AS login_time,
(
SELECT
timestampdiff(DAY, t1.create_date, now())
) AS reg_day,
ifnull(t2.totalcount, 0) AS buy_day,
ifnull(
count(DISTINCT c.order_no),
0
) AS buy_orders,
ifnull(sum(c.price * c.num), 0) AS buy_mon,
ifnull(
count(DISTINCT s.order_no),
0
) AS def_orders,
ifnull(sum(s.refund_price), 0) AS def_mon,
ifnull(count(ar.area_name), 0) AS addr_flag,
ifnull(count(shopc.cart_id), 0) AS cart_flag,
ar.area_name AS area_name
FROM
g_customer t1
LEFT JOIN g_serial_records t ON t1.user_id = t.user_id
AND pay_time IS NOT NULL
AND pay_time != '1900-01-01 00:00:00'
LEFT JOIN g_consume_records c ON c.user_id = t1.user_id
AND c.order_no = t.order_no
LEFT JOIN g_refund_records s ON t1.user_id = s.user_id
AND (s.state != '6')
AND t.order_no = s.order_no
AND s.product_id = c.product_id
AND s.sku_no = c.sku_no
LEFT JOIN (
SELECT
t2.user_id AS user_id,
count(t2.user_id) AS totalcount
FROM
(
SELECT
user_id,
date_format(create_date, '%y%m%d')
FROM
g_serial_records
WHERE
pay_time > '1900-01-01 00:00:00'
GROUP BY
date_format(create_date, '%y%m%d'),
user_id
) t2
GROUP BY
t2.user_id
) t2 ON t.user_id = t2.user_id
LEFT JOIN g_shopping_cart shopc ON shopc.user_id = t1.user_id
LEFT JOIN (
SELECT
ad.area_name,
ad.user_id
FROM
(
SELECT
min(newa.create_date),
newa.user_id,
newa.area_name
FROM
g_customer_addr newa
GROUP BY
newa.user_id
) ad
GROUP BY
ad.user_id
) ar ON ar.user_id = t1.user_id
GROUP BY
t1.user_id

解决方案

自己顶帖,就看看那几个left 外连接的查询如何优化

时间: 2024-12-31 17:08:46

sql语句优化,很着急,在线等,sql如下的相关文章

使用SQL语句优化DB2应用程序性能

当我们设计一个新的或分析一个现存的系统时,其中所要考虑的一个重要问题就是应用程序的设计问 题.即使数据库设计得很好而且还经过优化处理,应用程序设计不适当还是会引起性能问题的 数据库. 实践证明,如果应用程序存在设计上的问题,那么修改这些问题比调整数据库配置参数更能改善应用程序 的性能. 例如,SQL是一种高级语言,具有很大的灵活性,从数据库中提取相同的数据可以用不同形式的SELECT 语句来实现,但是,应用程序的性能却随着SELECT语句形式的不同而大相径庭,这是因为不同形式的 SELECT语句

oracle sql语句优化(转载)

(1)      选择最有效率的表名顺序 ( 只在基于规则的优化器中有效 ) : ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名, FROM 子句中写在最后的表 ( 基础表 driving table) 将被最先处理,在 FROM 子句中包含多个表的情况下 , 你必须选择记录条数最少的表作为基础表.如果有 3 个以上的表连接查询 , 那就需要选择交叉表 (intersection table) 作为基础表 , 交叉表是指那个被其他表所引用的表 . (2)      WHER

秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

SQL语句优化

前一段时间一直在优化系统,看了一些关于SQL语句优化的东西,在这里分享一下. 1.统一SQL语句的写法 对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的. select*from dual select*From dual 其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析.生成2个执行计划.所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行! 2.使用"临时表"暂存中间结果 简化SQL语句的重要方法就是采用临时表

SQL语句优化提高数据库性能_MsSql

性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化.为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设法对之进行简化. 常见的简化规则如下: 1)不要有超过5个以上的表连接(JOIN) 2)考虑使用临时表或表变量存放中间结果 3)少用子查询 4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出S

sql语句优化之SQL Server(详细整理)_MsSql

MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,

sql语句优化分享

sql语句优化分享 这是查询学生数据的逻辑,逻辑比较有点乱,这个查询跑30分钟也不会出结果,一执行CPU立马100%,虽然是个虚似机,但也不至于这种查询也对付不了,肯定有优化的地方.     SELECT  *        FROM 学生表 WITH(NOLOCK) WHERE          (FromSys IS NULL OR          (             (FromSys<>'A' AND FromSys<>'B' AND FromSys<>

[20151221]sql语句优化.txt

[20151221]sql语句优化.txt --自从发现开发乱用distinct以后,链接http://blog.itpub.net/267265/viewspace-1871989/ --我看sql语句特别注意连接多个表,但是显示仅仅一个表的情况,上个星期五,发现一条: sql_id=dpdk3xfd6cvky SELECT EMR_DJMX.ZSFL     FROM MS_YJ01, L_LIS_SQDMX, EMR_DJMX    WHERE     MS_YJ01.YJXH IN (

[20131204]sql语句优化.txt

[20131204]sql语句优化.txt 昨天优化sql语句,遇到一些细节问题,做一个记录: SCOTT@test> @verBANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production create table t (id numb