MySQL-求一个数据统计高效sql语句

发布于 2017-01-14 19:28:45 字数 159 浏览 1336 评论 3

充值订单部分表结构:
order_id、user_id、create_time、pid、prid
其中order_id是唯一索引

我想获取同一用户(user_id)最近充值前5个pid和prid,这个sql如何写呀?还有由于这个表数据量很大,所以sql要尽量效率高些。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-09-03 06:42:22

单独sql统计没想到很高效的方法,只能联表查询:

SELECT A.pid FROM 充值表 A
WHERE
order_id = (SELECT max( order_id ) FROM 充值表 WHERE user_id = '".$user_id."' AND pid = A.pid )
ORDER BY A.create_time DESC LIMIT 5

SELECT A.prid FROM 充值表 A
WHERE
order_id = (SELECT max( order_id ) FROM 充值表 WHERE user_id = '".$user_id."' AND prid = A.prid )
ORDER BY A.create_time DESC LIMIT 5

想挽留 2017-08-17 22:44:38

SQL语句本身可能优化的空间有限,可以写为:

select pid, prid from table_name where user_id=XXX limit 5;

其中,如果不是按照时间排序,还有必要考虑where中增加create_time。这里没写(为了减少不必要的查询条件)。

至于执行效率,可以从其他方面着手,比如服务器性能,比如数据库建立索引等等。

夜无邪 2017-03-17 19:09:32

试试这样:

 SELECT DISTINCT pid,prid FROM tablename WHERE user_id = xx limit 5

然后对user_id 加个索引,我想速度应该还可以!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文