关于一条SQL语句的优化
目前有这样一张表,查询要求:查询出当每个用户交易金额累计达到70时的交易时间。
源码:
我的查询语句是这样的写的:
这样写可以是实现查询的功能,但是这张表有30万数据的时候,运行速度超级慢,大概需要2分钟。请问高手们,这句该怎么样优化,或者有其他更好的办法实现没,用存储过程也可以,只要能提升性能。
源码:
DROP TABLE IF EXISTS t_g;
CREATE TABLE t_g
(t_id BIGINT AUTO_INCREMENT,
t_userid VARCHAR(20) DEFAULT '' COMMENT '用户id',
t_je VARCHAR(20) DEFAULT '' COMMENT '交易金额',
t_date VARCHAR(20) DEFAULT '' COMMENT '交易时间',
PRIMARY KEY(t_id)
);
-- 创建索引
CREATE INDEX i_a ON t_g (t_userid,t_date);
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','20','20160701');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','10','20160702');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','15','20160703');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','15','20160704');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','20','20160705');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','50','20160706');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','20','20160707');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('A','20','20160708');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('B','40','20160701');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('B','20','20160702');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('B','15','20160703');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('B','15','20160704');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('C','20','20160701');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('C','50','20160702');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('C','20','20160703');
INSERT INTO t_g (t_userid,t_je,t_date) VALUES ('C','20','20160704');
我的查询语句是这样的写的:
select x.t_userid,MIN(x.t_date) from
(select a.t_userid,a.t_date,(select sum(t_je) from t_g where t_userid = a.t_userid and t_date <= a.t_date
)total from t_g a)x
where x.total/100 > 70 GROUP BY x.t_userid;
这样写可以是实现查询的功能,但是这张表有30万数据的时候,运行速度超级慢,大概需要2分钟。请问高手们,这句该怎么样优化,或者有其他更好的办法实现没,用存储过程也可以,只要能提升性能。
...全文
相关推荐
Mysql查询最近一条记录的sql语句(优化篇)
在MySQL数据库中,查询最近一条记录通常涉及到时间戳或者某个排序字段。本文主要探讨了三种不同的SQL语句来实现这一目标,从效率低下的方法到更优化的解决方案,特别是针对大量数据的情况。
oracle下一条SQL语句的优化过程(比较详细)
在Oracle数据库环境中,SQL语句优化是一个至关重要的任务,它直接影响到数据库的性能和响应速度。本文将详细探讨一个特定的SQL查询优化案例,该查询用于计算特定客户在某一天的总销量。
优化一条千万级别数据的SQL语句
当前sql如下:select * from user where create_time between
一条sql语句完成MySQL去重留一
本文主要介绍如何使用SQL语句来实现“去重留一”,即删除重复记录并仅保留一条,且判断重复的标准基于多个字段。以下是对这个问题的详细解答。
一个完整程序只有一条SQL语句
在IT行业中,编程效率和代码优化是至关重要的。标题提到的"一个完整程序只有一条SQL语句",这展示了如何高效地利用SQL语句来完成数据操作。


