最近在工作中,进行大量的数据处理,使用的是mysql5.7.22,发现当数据量级达到几十万之后,SQL执行速度明显变慢。尤其是当多个表join时,于是就尝试用python pandas进行数据处理,发现运行速度明显比SQL运行速度快。于是,决定比较一下千万数据量级之下,SQL、pandas、shell在数据处理上的优劣势。

配置:ubuntu系统64位,8G内存,intel i7处理器

软件环境:mysql5.7.22  , python3下的pandas ,  shell

测试数据:

数据是使用python随机生成的,订单表的时间跨度是2015年-2018年,共计2000万行,csv文件大小是909M;用户表共计500万行,csv文件大小是284M。

表1:订单表  orderid、ordertime、uid、amount、status

表2:用户表  uid、gender、birthday、mobile、email

使用shell、pandas的话,直接访问,两个表的csv文件,逗号分隔符;mysql的话,将数据先导入到数据库。

一、单表查询   mysql  PK  shell

1、计数

shell完胜!

(注:有些人有误区,认为count(*) 比 count(字段名) 慢,实际上,count(*)是最快的,count(字段名) 该字段在表中的位置决定运行速度,越靠后越慢,已亲测!)

2、求和

shell 和 SQL 的速度差不多!

3、查找

shell我们用了两种写法,可以看到,当需要对文件进行列分割的时候,速度明显慢了很多。

使用SQL查询,因为orderid是表的主键,对于有索引的列进行查找的时候,速度还是非常快的。(加索引和不加索引的区别,非常的大,尤其是当数据量级大的时候)。

我们再来看一下,对不加索引的列进行查找的话,SQL的速度怎么样。

user表是500万的数据量,这样看来,进行查找时,列加索引和不加索引的区别还是挺明显的。

小结:当SQL对加索引的键,进行筛选查找时,SQL的速度是优于shell的;但是,如果对加索引的列进行函数操作时,还有对不加索引的列进行查找时,速度会明显慢很多。

4、分类汇总  按月汇总,每个月下单数量、金额,成交订单数量、金额

根据年份进行汇总之后,都将数据保存到表里,这里shell又是完胜哈!

5、文本处理  不同类型邮箱、不同级别 用户数量分布

shell写法1:因为使用uniq -c 需要先用sort进行排序,所以速度明显比较慢,要用到8s左右。

shell写法2:使用awk来进行汇总,速度较uniq -c有了明显提升。

SQL:运行速度将近6s,还是挺快的,我还以为对文本进行字符串进行截取会比较慢呢,哈哈。

shell写法2,完胜!

单表查询总结:

(1)使用SQL的话,where用到的列加索引速度比较快;当需要对其进行函数运算时,或者当字段没有加索引时,速度就慢很多,因为需要全表遍历;

(2)数据量级较大时,使用shell进行简单的单表查询,速度明显优于SQL。

(3)使用python的pandas,因为需要现将数据读取到内存中,这部分会耗费一部分时间,所以简单的一句可以搞定的查询,我一般还是比较倾向于使用SQL和shell。但是,当需要,进行多个大表关联进行运算时,pandas的速度还是非常快的,这部分我们下篇见。

二、多表查询(下次更新...写不动了...)

场景1:各个级别用户数量,以及在每一年下单的用户数量,订单量,订单金额,成交订单量,成交订单金额。

场景2:获取2018年,每个月成交订单总金额在前5名的订单详情信息,包括订单表全部字段和用户表全部字段(我们需要对土豪用户进行详细的了解)。

201806 数据处理 SQL、python、shell 哪家强...速度PK(上篇)的更多相关文章

  1. 【xlwings1】Python-Excel 模块哪家强

    Python-Excel 模块哪家强?   0. 前言 从网页爬下来的大量数据需要清洗? 成堆的科学实验数据需要导入 Excel 进行分析? 有成堆的表格等待统计? 作为人生苦短的 Python 程序 ...

  2. 图表制作软件哪家强?当属火爆商业智能圈的Smartbi

    图表制作软件选择多吗? 相对来说,统计图表制作软件还是很多的.比如常见的百度图说还有wps和excel都是可以制作好看的统计图的.关键就是看是在怎样的业务场景下使用.一般情况下,如果你对Excel足够 ...

  3. 百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?

    一.短链接是什么 url=HPqdQ5VR3vA39x7ZWoWyNzwWnsDhTbh66BTpdzsJLroBDzFRm4JV-G818Zc027uZrwe7zxtxnD4H2FUahftpUK& ...

  4. 自动化冒烟测试 Unittest , Pytest 哪家强?

    前言:之前有一段时间一直用 Python Uittest做自动化测试,觉得Uittest组织冒烟用例比较繁琐,后来康哥提示我使用pytest.mark来组织冒烟用例 本文讲述以下几个内容: 1.Uni ...

  5. PAT 挖掘机技术哪家强

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N  ...

  6. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  7. PAT乙级 1032. 挖掘机技术哪家强(20)

    1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底 ...

  8. PAT (Basic Level) Practise:1032. 挖掘机技术哪家强

    [题目链接] 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行 ...

  9. .NET ORM 哪家强

    ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说. 闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究. 参赛ORM 1.SqlSugar:是一 ...

随机推荐

  1. 最好还是用#pragma once

    最好还是用#pragma once  https://www.cnblogs.com/techdreaming/p/4921780.html

  2. html5+css基础

    最近在学习html+css3基础教程,整理了一些基础知识点.在此与大家分享. 1.盒模型 定义:css处理网页时,它认为每个元素都包含在一个不可见的盒子里,即我们所熟知的盒模型.其中它的主要属性有:h ...

  3. xamarin.forms 动态条件更换数据模板

    解决方案1:  https://oren.codes/2014/12/31/datatemplateselector-for-xamarin-forms/ 解决方案2:  https://docs.m ...

  4. leaflet.toolbar.js

    leaflet.toolbar.js 参考:https://www.javascriptcn.com/read-38464.html

  5. Django框架详细介绍---中间件(认证)

    一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...

  6. linux 扩展文件系统

    1. 创建新分区 [root@localhost ~]# fdisk -l Disk /dev/sda: bytes, sectors Units = sectors of * = bytes Sec ...

  7. Node.js基础学习二之POST请求

    本篇介绍下 Node.js post 请求 需求: 用户登录,前端界面输入用户名和密码,点击登录请求后台验证,根据后台反馈的信息做出响应 前端: (1)使用form表单 (2)使用ajax异步请求 服 ...

  8. Java ascii码值转为输出ascii码

    Java ascii码值转为输出ascii码 public static void main(String[] args) { // TODO Auto-generated method stub S ...

  9. 根据RadioButtonList动态显示隐藏Div

    使用场景 今天在写项目的时候遇到一个需求,注册页面,用户先选择类型继而填表单,所以需要根据选择切换表单,使用的前端框架是MiniUI,但是在实现这个功能的时候mini.get()方法无法得到div元素 ...

  10. Java基础面试题总结

    目录 索引 Java基础知识篇 Java web基础知识总结 Java集合篇常见问题 Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较 ...