2016-02-05 95 views
1

我有使用Python和mysql.connector蟒蛇mysql.connector使用fetchall()運行極其緩慢

query = 'SELECT age, score FROM patient' 
cursor.execute(query) 
dr = cursor.fetchall() or cursor.fetchone() 
print(dr) 

在phpMyAdmin一個簡單的SQL查詢,此查詢非常快(0.003s)。 如果我使用fecthone(),它也可以在Python中快速運行。但是,如果使用fetchall(),它會變得非常慢。有時需要幾分鐘時間並打印結果。有時它只是失敗並停下來。

我的數據是440,000行。我想要根據年齡來繪製分數,所以我必須讀取所有數據。有人可以幫助我嗎? ps:如果我擺脫fetchall(),fetchone()並打印,它運行速度非常快。但那麼如何獲得我的數據並將其繪製?

+0

不完全是一個答案,但你有沒有嘗試'MySQLdb'或類似['ultramysql'](https://github.com/esnme/ultramysql)? – alecxe

+0

謝謝。我沒有。也許我應該嘗試一下。 – wildcolor

+0

有沒有辦法,它應該需要幾分鐘來查詢五十萬行......你使用的計算機有多慢?密謀五十萬行,我可以看到有點慢,但沒有提取... –

回答

1

抓取所有 440K記錄可以合法地很慢。

如果你想畫一個情節,你通常不需要440k點;你的屏幕可能只有2000到4000像素寬,比100-200倍小。您可以顯示只繪製相關部分數據的繪圖部分,或者可以預先計算縮小版本(IIRC MySQL不支持本地表格採樣)。

作爲一個方面說明:如果你關心數據庫性能可言,經常inspect query plans。提取一條記錄的計劃可能與提取所有記錄的計劃大不相同,如果您的數據庫提供了許多併發請求,它們可能會有不同的優先級。這都會顯着影響數據延遲。

+0

感謝您的解決方案。我實際上想要獲取所有數據並首先進行一些分析。這就是爲什麼我需要所有數據。在屏幕上繪製它是我能想到的第一件事。 – wildcolor