Pandas比MySQL快?
知乎上有人问,处理百万级数据,Python列表、Pandas、Mysql哪个更快?
Pands是Python中非常流行的数据处理库,拥有大量用户,所以拿它和Mysql对比也是情理之中。
实测来看,MySQL > Pandas > Python列表,而且MySQl远快于后两个,几乎是碾压。
这主要是数据库语言和编程语言的差异,其实是不同层面的东西。
Python列表和Pandas是基于内存操作的,百万级数据内存占用高,可能会溢出。
但Pandas算法更优,所以快于Python列表。
Pandas主要基于numpy向量化计算,而且像排序、聚合等算法优化的比较好,一般会比Python列表更快3倍以上。
如果内存占用大,Pandas可以分块读取,所以对于大数据比Python列表有更好的处理能力。
MySQL无疑是最快的,这一点相信写过SQL的人能感受到。
它的数据存储在磁盘,得益于索引和查询优化,而且有分页查询、多线程等,比Pandas和Python列表快很多。
举几个列子,分别是聚合、排序、复杂查询操作。
1、聚合操作(求和)
Python列表(分钟级)需要对嵌套列表进行if遍历,再求和,这非常慢。
Pandas(十秒级)可以用向量化计算来实现,比如df.groupby().sum()
Mysql(秒级)结合索引优化和聚合函数,使用select sum(…) from … group by…
2、排序操作
Python列表(分钟级)使用内置sort()和sorted()方法,时间复杂度高
Pandas(十秒级)使用pandassort_values方法实现,调用C底层算法,比较快
Mysql(秒级)通过索引直接读取B+树,非常快
3、复杂查询(多表+多条件)
Python列表(分钟级)加载全部数据到内存,且算法复杂
Pandas(十秒级)加载全部数据到内存,可以算法优化,但也不快
Mysql(秒级)通过索引和join方法优化,非常快
所以结论如下:
- Python列表:适合万级以下小规模数据的处理
- Pandas:适合百万左右中等数据规模的处理
- Mysql:适合千万以上大规模数据的处理
对了,其实你在Python中可以使用mysql的,有一个专门的sdk接口-pymysql,可以支持python连接mysql,不管是查询、建表、插入数据等都可以实现。