У меня есть таблица с более миллиона записей со следующей структурой:Улучшение MySQL время чтения, 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 |....
Я читал данные из этой таблицы в питоне для черчения. Проблема в том, что чтение в 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 ....
Будет ли нормализовать стол, чтобы помочь мне ускорить выполнение задачи? Если да, как мне его нормализовать?
P.S: Вот результат для 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 | |
+------------+--------------+------+-----+---------+-------+
Действительно ли вы должны прочитать целая таблица для создания ваших участков? Не могли бы вы использовать хотя бы условие WHERE для получения только необходимых данных? –
Я использую предложение WHERE для получения конкретных данных для отдельных графиков. Но вся таблица будет прочитана. спасибо .. –
Запустите ['EXPLAIN'] (http://dev.mysql.com/doc/refman/5.0/en/explain.html) по вашему запросу, а затем опубликуйте результаты здесь (если действительно проблема на MySQL). –