最近在工作中,进行大量的数据处理,使用的是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. 2019.04.16 python基础50

    第五十一节  pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...

  2. Cocos Creator_继承组件单例

    前言 单例,在游戏开发中是比较常用的功能,全局唯一,可以在任何地方直接获取, 省去了方法赋值 或者 属性面板拖动的麻烦. 普通单例_饿汉模式 不管有没调用,一开始就创建单例 1 // Singleto ...

  3. JavaScript 判断当前设备是否是移动端还是PC

    if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){ alert('移动端')}else { alert('PC端') }

  4. 2018-2019 20175232 实验二《Java面向对象程序设计》实验报告

    一.实验内容及步骤 1熟练掌握Junit和TDD: TDD(Test Driven Devlopment, 测试驱动开发)我们是该“先写产品代码,然后再写测试代码,通过测试发现了一些Bugs,修改代码 ...

  5. Go 初体验 - 并发与锁.3 - 竞态

    竞态,就是多个协程同时访问临界区,由并发而产生的数据不同步的状态. 这个说的有点low,没办法,我就是这么表达的,官方的请度娘. 先上代码: 输出: 为何不是1000?就是因为竞态,发生竞态后,最终的 ...

  6. 学习DButils笔记

    DBUtills: *********************** 1:创建对象:QueryRunner的对象,其中创建的方式有两种: ①QueryRunner qr = new QueryRunne ...

  7. 在Ubuntu16.04中python环境下实现tab键补全

    1.编写tab.py的代码: 1 #!/usr/bin/env python 2 # python startup file 3 import sys 4 import readline 5 impo ...

  8. python 名称前的单下划线

    单前导下划线 _var 1.特点一 在PEP8约定中定义,以单个下划线开头的变量或方法仅供内部使用.用于指定该名称属性为“私有”.为了使其他人(或你自己)使用这些代码时将会知道以“_”开头的名称只供内 ...

  9. Unicode,GBK和UTF8

    字符集 在介绍他们之间的区别时, 我们先讲下什么是Unicode. 简单来说,Unicode是一个字符集(character set), 和ASCII一样, 其作用是用一系列数字来表示字符(chara ...

  10. CCF CSP 201604-1 折点计数

    题目链接:http://118.190.20.162/view.page?gpid=T42 问题描述 试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0M ...