[英]Improving MySQL read time, MySQLdb
我有一個表格,其中有超過一百萬條記錄,其結構如下:
mysql> SELECT * FROM Measurement;
+----------------+---------+-----------------+------+------+
| Time_stamp | Channel | SSID | CQI | SNR |
+----------------+---------+-----------------+------+------+
| 03_14_14_30_14 | 7 | open | 40 | -70 |
| 03_14_14_30_14 | 7 | roam | 31 | -79 |
| 03_14_14_30_14 | 8 | open2 | 28 | -82 |
| 03_14_14_30_15 | 8 | roam2 | 29 | -81 |....
我正在從這張表中讀取數據到python中進行繪圖。 問題是,MySQL的讀取速度太慢,即使使用MySQLdb.cursors.SSCursor(如本論壇中的一些人所建議的那樣)來加快任務速度,我也要花費數小時才能獲得圖表。
con = mdb.connect('localhost', 'testuser', 'conti', 'My_Freqs', cursorclass = MySQLdb.cursors.SSCursor);
cursor=con.cursor()
cursor.execute("Select Time_stamp FROM Measurement")
for row in cursor:
... Do processing ....
標准化表格會幫助我加快任務速度嗎? 如果是這樣,我應該如何規范它?
PS:這是EXPLAIN的結果
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| Time_stamp | varchar(128) | YES | | NULL | |
| Channel | int(11) | YES | | NULL | |
| SSID | varchar(128) | YES | | NULL | |
| CQI | int(11) | YES | | NULL | |
| SNR | float | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
問題可能出在您遍歷游標而不是一次轉儲所有數據然后對其進行處理。 您應該能夠在幾/幾秒鍾內轉出幾百萬行。 嘗試做類似的事情
cursor.execute("select Time_stamp FROM Measurement")
data = cusror.fetchall()
for row in data:
#do some stuff...
好吧,既然你說整個表已被閱讀,我想你不能做這件事。 它有超過一百萬條記錄...您不會在數據庫方面進行太多優化。
僅處理一條記錄需要多少時間? 也許您可以嘗試優化該部分。 但是,即使您將每條記錄的時間降低到了1毫秒,處理整個表仍將花費大約半小時。 您正在處理大量數據。
也許並行運行多個繪圖作業? 使用與上述相同的指標,將您的數據划分為6個相同大小的作業(理論上)將在5分鍾內為您提供繪圖。
您的地塊必須細粒度嗎? 您可以尋找忽略數據中某些值的方法,並僅在用戶需要時才生成完整的圖(在這里很容易猜測,我真的不知道您的圖是什么樣子)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.