201806 数据处理 SQL、python、shell 哪家强...速度PK(上篇)
最近在工作中,进行大量的数据处理,使用的是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(上篇)的更多相关文章
- 【xlwings1】Python-Excel 模块哪家强
Python-Excel 模块哪家强? 0. 前言 从网页爬下来的大量数据需要清洗? 成堆的科学实验数据需要导入 Excel 进行分析? 有成堆的表格等待统计? 作为人生苦短的 Python 程序 ...
- 图表制作软件哪家强?当属火爆商业智能圈的Smartbi
图表制作软件选择多吗? 相对来说,统计图表制作软件还是很多的.比如常见的百度图说还有wps和excel都是可以制作好看的统计图的.关键就是看是在怎样的业务场景下使用.一般情况下,如果你对Excel足够 ...
- 百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?
一.短链接是什么 url=HPqdQ5VR3vA39x7ZWoWyNzwWnsDhTbh66BTpdzsJLroBDzFRm4JV-G818Zc027uZrwe7zxtxnD4H2FUahftpUK& ...
- 自动化冒烟测试 Unittest , Pytest 哪家强?
前言:之前有一段时间一直用 Python Uittest做自动化测试,觉得Uittest组织冒烟用例比较繁琐,后来康哥提示我使用pytest.mark来组织冒烟用例 本文讲述以下几个内容: 1.Uni ...
- PAT 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N ...
- PAT 1032. 挖掘机技术哪家强(20)
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...
- PAT乙级 1032. 挖掘机技术哪家强(20)
1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底 ...
- PAT (Basic Level) Practise:1032. 挖掘机技术哪家强
[题目链接] 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行 ...
- .NET ORM 哪家强
ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说. 闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究. 参赛ORM 1.SqlSugar:是一 ...
随机推荐
- 最好还是用#pragma once
最好还是用#pragma once https://www.cnblogs.com/techdreaming/p/4921780.html
- html5+css基础
最近在学习html+css3基础教程,整理了一些基础知识点.在此与大家分享. 1.盒模型 定义:css处理网页时,它认为每个元素都包含在一个不可见的盒子里,即我们所熟知的盒模型.其中它的主要属性有:h ...
- xamarin.forms 动态条件更换数据模板
解决方案1: https://oren.codes/2014/12/31/datatemplateselector-for-xamarin-forms/ 解决方案2: https://docs.m ...
- leaflet.toolbar.js
leaflet.toolbar.js 参考:https://www.javascriptcn.com/read-38464.html
- Django框架详细介绍---中间件(认证)
一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...
- linux 扩展文件系统
1. 创建新分区 [root@localhost ~]# fdisk -l Disk /dev/sda: bytes, sectors Units = sectors of * = bytes Sec ...
- Node.js基础学习二之POST请求
本篇介绍下 Node.js post 请求 需求: 用户登录,前端界面输入用户名和密码,点击登录请求后台验证,根据后台反馈的信息做出响应 前端: (1)使用form表单 (2)使用ajax异步请求 服 ...
- Java ascii码值转为输出ascii码
Java ascii码值转为输出ascii码 public static void main(String[] args) { // TODO Auto-generated method stub S ...
- 根据RadioButtonList动态显示隐藏Div
使用场景 今天在写项目的时候遇到一个需求,注册页面,用户先选择类型继而填表单,所以需要根据选择切换表单,使用的前端框架是MiniUI,但是在实现这个功能的时候mini.get()方法无法得到div元素 ...
- Java基础面试题总结
目录 索引 Java基础知识篇 Java web基础知识总结 Java集合篇常见问题 Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较 ...