[Pandas]一个Pandas VS MySQL SQL 的性能对比

2019年03月25日 17227点热度 5人点赞 2条评论

引言

最近使用MySQL做一些数据统计比较多。 有时候为了省事直接写出了一个略复杂的SQL查询, 直接获得最后的结果。 但是总是觉得比较慢。 下面做了一个改动,简述如下:
* 原来:
纯粹使用SQL查询, 得到最后的结果
* 改进:
使用SQL查询原始数据+Pandas进行数据处理
* 结论:
改进方案的性能提升了300%

原方案:

select t2_id, name, col2
from (
select sum(col1) as col1_sum, col2, t2.name, t2_id
FROM t1
left JOIN t2 on t2_id = t2.id
WHERE date > (NOW() - INTERVAL 12 HOUR) and col1 > 0 and price > 0 and bidfloor > 0
GROUP BY col2, t2_id
ORDER BY col1_sum desc
) t
order by t.col1_sum desc

思路还是比较清晰的, 就是比较慢。 一共花费了51s

新方案

  • Step 1: 使用SQL读取原始数据

select col1, col2, t2.name, t2_id
from t1
left JOIN t2 on t2_id = t2.id
WHERE date > (NOW() - INTERVAL 12 HOUR) and col1 > 0 and price > 0 and bidfloor > 0

  • Step2 : 使用Pandas进行Group / Count / Sort的操作

计时结果:
* step1: 16s
* step2: 0.7s
* total: 16.7s, (原来: 51s)

补充: 为了不暴露真实表名、列名, 因此使用t1/t2/col1/col2替代真正的名字了

本文原创, 转载需要著名出处:www.flyml.net

RangerWolf

保持饥渴的专注,追求最佳的品质

文章评论

  • gqqnbig

    很有趣啊。。有没有看过数据库执行计划,哪里用时比较多?

    2019年11月16日
    • rangerwolf

      感谢指点。对数据库了解不深, 还没有详细深入研究。

      2019年12月21日