2 qq 21075683 qq_21075683 于 2016.03.15 16:59 提问

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

1个回答

qq_21075683
qq_21075683   2016.03.15 17:04

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SQL优化工具
目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析、约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区3  海量数据库及分区4  高级SQL优化(一)   高级SQL优化(二)   高级SQL优化(三) 常用优化工具  PPT和源码下载:    http://sishuok.
用with改写优化sql
网友发来一案例,sql如下,表名及部分字段名作了处理,这个sql要跑20分钟。 WITH SAWITH0 AS (select distinct T_A.T_A_SHORT_NAME as c1, cast(substr(T_B.CAL_MONTH_NAME, - (2)) as INTEGER) as c2, T_B
如何优化sql语句
 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效):    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作
sql语句的简单优化
常见的sql优化技巧 ①通过变量的方式来设置参数 好: 1 stringsql = "select * from people p where p.id = ? "; 坏: 1 stringsql = "select * from people p where p.id = "+id; 数据库的SQL文
实战记录:一次真实的线上SQL语句优化
本文章首发于头条号 架构之美 背景:最近重构公司一小模块的RPC服务,由于旧的服务框架监控对于边缘业务统计并不完善,切换到新服务之后,从慢SQL监控中发现了不少慢SQL语句,虽然并不是什么特别重要的业务,但是既然这东西到咱手上,就权当练练手吧。 总请求量 先看一下总请求量,做到心里有数。从这一小块服务的每日请求量统计来看,日均请求510万左右,不是很多,可以放心搞 :-) 慢S
Mysql 数据库优化--查询缓存及sql语句优化-索引优化,史上最全最全
查询执行基础知识 show processlist来查看当前有何进程 查询缓存 Mysql的cache功能的原理是,如果开启mysql的缓存功能,mysql自动将select语句按一定的规则生成二进制的结果集并对一个key缓存到内存中,如果下次用户的请求跟这条select语句一样的话就会直接调用内存中的数据,而不用再去重新执行sql语句了,所以只有select语句跟缓存中的select完
Oracle SQL语句优化【4】之使用SQL优化工具
SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用。对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响。但是每个人掌握SQL语言的水平不同,如何才能保证写出高性能的SQL呢?    针对这种情况,人工智能自动SQL优化工具应运而生。现在我就向大家介绍这样一款工具:SQL Tuning for SQL Server。 1. SQL Tuning
oracle SQL语句优化概述
SQL语句优化概述,SQL语句优化概述,SQL语句优化概述,SQL语句优化概述,SQL语句优化概述,
使用with as 优化SQL
在一个SQL语句中,如果某个表需要被访问多次,而且每次访问的时候限制调剂基本上一致的话,我们就可以利用with as来优化下面举个例子:SQL> CREATE TABLE t1 (id number, name varchar2(10));Table created.SQL> begin  2      FOR i IN 1 .. 1000 LOOP  3          INSERT INTO t1 VALUES(i,'fuck');  4      END loop;  5      commit; 
sql基础 (表结构的增删改查)
创建 create table Student( id int, name varchar(20), age int not null, sex varchar(10) )    //创建学生表,列的名称与数据类型需给出。not null 为非空约束   修改 alter table Student add height int  //添加列--身高   删除 drop