回答

收藏

Pandas加载CSV的速度比SQL快

技术问答 技术问答 329 人阅读 | 0 人回复 | 2023-09-14

从CSV加载数据似乎比从Pandas的SQL(Postgre SQL)加载数据要快。(我有一个固态硬盘)
% \4 {7 @+ f2 S- U0 I8 @7 P1 L  r7 M这是我的测试代码:
4 }& D7 \1 E$ ^8 q: fimport pandas as pd
4 m$ Y: C2 N+ b  X8 u  U1 w& o5 _import numpy as np
+ f5 E0 q8 B* Y. ~# S$ {: W3 w9 qstart = time.time()
; d5 z5 J/ [" Z0 t% z1 xdf = pd.read_csv('foo.csv')2 ]9 r. s8 h  y0 x6 p
df *= 3
( ]/ @, V' j( V5 l" K7 g# |duration = time.time() - start$ q0 ~& C- [' Z# M( x+ ]
print('{0}s'.format(duration))( |0 _1 c6 R; g& d4 |
engine = create_engine('postgresql://user:password@host:port/schema')2 U" q. ~' k! a. B/ a- J( j/ [
start = time.time()
2 y; ^; v, C% T1 A3 Hdf = pd.read_sql_query("select * from mytable", engine)3 ~  [/ L. z( Z) a9 m( L/ y
df *= 32 Z% F, W( X1 d- ]$ E" o
duration = time.time() - start
/ f) o$ k  D2 @9 Rprint('{0}s'.format(duration))9 b# O% Q$ N8 }0 I% r9 }: Q4 l$ X
foo.csv和数据库是相同的(两个列中的数据和列数相同,4列,100000行充满随机int)。
8 o) p( E( e3 x$ n+ h$ t* UCSV需要0.05秒# v" K9 L; ]7 ?% l5 |5 l
SQL花费0.5秒8 t7 j2 h# R# a& I  k" i, m
您认为CSV比SQL快10倍是正常的吗?我想知道我是否在这里错过了什么…
) @2 R. [* K; ~1 n2 p' x               
  f, A; E. T8 _解决方案:$ W8 \  G* ?+ D6 p1 S. o5 ?  y/ r
                7 ?+ E3 @1 S6 ^0 z

+ k. \. `$ Y1 q/ Q0 l) a3 m8 q1 l* f1 v9 v, S( |0 b
                这是正常现象,读取csv文件始终是简单加载数据的最快方法之一
' P$ f' }  o- I  ]$ MCSV非常幼稚且简单。直接从中加载将非常快。对于具有复杂结构的海量数据库,不能选择CSV。SQL从表中选择数据并将数据返回给您的速度非常快。自然,如果您可以选择,修改和处理数据,则将增加通话的间接费用。3 l0 Q, `+ S! f- O3 N' ]
想象一下,您有一个从1920年到2017年的csv中的时间序列,而您只想要从2010年到今天的数据。4 X+ x4 _' E$ `
csv方法 是加载整个csv,然后选择2010年到2017年。/ ^0 I; T' g7 {
SQL方法 是通过SQL选择功能预选年份
* K4 A6 o' v3 o在这种情况下,SQL将更快。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则