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:是一 ...
随机推荐
- js中hash、hashchange事件
1.hash即URL中"#"字符后面的部分. ①使用浏览器访问网页时,如果网页URL中带有hash,页面就会定位到id(或name)与hash值一样的元素的位置: ②hash还有另 ...
- KubeCon + CloudNativeCon论坛2019上海
2019年,KubeCon + CloudNativeCon和Open Source Summit在将在中国共同举办一场活动. In 2019, KubeCon + CloudNativeCon an ...
- cocos2dx在win10系统上的VS2017运行时报错:丢失MSVCR110.dll
如题,运行环境为cocos2dx 3.14.1,win10系统,VS2017. 编译cocos2dx的cocos2d-x-3.14.1/build/cocos2d-Win32.sln已通过,不过运行时 ...
- 关于动态添加iview admin路由以及刷新侧边栏
在main.js中的mounted中使用router.addRouters()方法后界面上的路由并未刷新. 在注释掉路由跳转的权限限制之后,发现直接在地址栏输入对应路由能够进去,只是侧边栏没有刷新. ...
- Kali-Dos洪水攻击之Hping3
在计算机行业,拒绝服务(DoS)或分布式拒绝服务(DDoS)攻击是指不法分子企图让某机器或网络资源无法被预期的用户所使用.虽然执行DoS攻击的方式.动机和目标不一样,但通常包括设法临时性或无限期中断或 ...
- Promise的那些事儿
在JavaScript中,异步操作非常多见,然而在Promise之前,我们是在类似以下的做法中处理多重异步回调,每一层里都要调另一个异步函数,形成了所谓的"回调地狱", Promi ...
- Docker下配置双机热备PXC集群
架构: 步骤: 1.安装centos7 ,设置宿主机IP:192.168.1.224 2.先更新yum软件管理器,再安装docker 1.yum -y update 2.yum install - ...
- angular4实战开发问题——ngclass不起作用
由于路由机制会导致页面不刷新. 在项目中,很多都是使用click做的路由跳转.ngclass有时候会不起作用, 这个时候我是很盲目的,一开始在考虑是不是书写的问题.ngclass需要有特定的格式?第一 ...
- keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...
- vue获得当前页面URL动态拼接URL复制邀请链接方法
vue获得当前页面URL动态拼接URL复制邀请链接方法 当前页面完整url可以用 location.href路由路径可以用 this.$route.path路由路径参数 this.$route.par ...