80 likes | 260 Views
Работа MySQL с экстремально большими таблицами. Григорий Рубцов , SQLinfo.ru rgbeast@sqlinfo.ru. Григорий Рубцов , rgbeast@sqlinfo.ru. MySQL может работать с миллиардами записей в таблице Полезные алгоритмы : пакетная вставка построение индекса. Григорий Рубцов , rgbeast@sqlinfo.ru.
E N D
Работа MySQL с экстремально большими таблицами Григорий Рубцов, SQLinfo.ru rgbeast@sqlinfo.ru
Григорий Рубцов, rgbeast@sqlinfo.ru • MySQL может работать с миллиардами записей в таблице • Полезные алгоритмы: • пакетная вставка • построение индекса
Григорий Рубцов, rgbeast@sqlinfo.ru CREATE TABLE `l18_45_1` ( `lev` tinyint(4) NOT NULL, `x` smallint(6) NOT NULL, `y` smallint(6) NOT NULL, `t` smallint(6) NOT NULL, `i` tinyint(3) unsigned NOT NULL, `e` smallint(5) unsigned NOT NULL, `c` smallint(6) NOT NULL ) ENGINE=MyISAM;
Григорий Рубцов, rgbeast@sqlinfo.ru В csv-файле 2.8 млрд. строк (81 Gb) mysql> LOAD DATA LOCAL INFILE 'l18_45_1.csv' INTO TABLE `l18_45_1`; Query OK, 2845803579 rows affected (48 min 59.57 sec) Records: 2845803579 Deleted:0 Skipped:0 Warnings:0 mysql> ALTER TABLE `l18_45_1` ADD KEY (lev,x,y); Query OK, 2845803579 rows affected (2 hours 52 min) Records: 2845803579 Duplicates:0 Warnings:0
Григорий Рубцов, rgbeast@sqlinfo.ru • Cоздание индекса требует свободного места в tmpdir, иначе будет использован неэффективный алгоритм “Repair with keycache” • ALTER TABLEсначала копирует всю таблицу во временную;
Григорий Рубцов, rgbeast@sqlinfo.ru mysql>SELECT t,i,e,c FROM l18_45_1 WHERE lev=7 AND x=1211 AND y=-19; +------+---+------+-------+ | t | i | e | c | +------+---+------+-------+ | 4999 | 1 | 3193 | 17934 | | 5097 | 1 | 2839 | 17004 | | 5015 | 1 | 3681 | 17331 | | 5021 | 1 | 3283 | 9422 | | 5023 | 1 | 3836 | 11277 | | 4991 | 1 | 4033 | 15957 | +------+---+------+-------+ 6 rows in set (0.11 sec)
Григорий Рубцов, rgbeast@sqlinfo.ru • Большие таблицы работают • Построение индексов масштабируется как O(N1.2), что недалеко от оптимального O(N log N) • Использование PARTITIONING улучшает масштабируемость