Работа MySQL с экстремально большими таблицами Григорий Рубцов, SQLinfo.ru
MySQL может работать с миллиардами записей в таблице Полезные алгоритмы: – пакетная вставка – построение индекса Григорий Рубцов,
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; Григорий Рубцов,
В csv-файле 2.8 млрд. строк (81 Gb) mysql> LOAD DATA LOCAL INFILE 'l18_45_1.csv' INTO TABLE `l18_45_1`; Query OK, rows affected (48 min sec) Records: Deleted:0 Skipped:0 Warnings:0 mysql> ALTER TABLE `l18_45_1` ADD KEY (lev,x,y); Query OK, rows affected (2 hours 52 min) Records: Duplicates:0 Warnings:0 Григорий Рубцов,
Cоздание индекса требует свободного места в tmpdir, иначе будет использован неэффективный алгоритмRepair with keycache ALTER TABLE сначала копирует всю таблицу во временную; Григорий Рубцов,
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 | | | 5097 | 1 | 2839 | | | 5015 | 1 | 3681 | | | 5021 | 1 | 3283 | 9422 | | 5023 | 1 | 3836 | | | 4991 | 1 | 4033 | | rows in set (0.11 sec) Григорий Рубцов,
Число строкВремя загрузки Построение индекса Выборка по индексу 0.03x мин0.8 мин0.01 сек 0.31x мин10.1 мин0.07 сек 2.85x мин172.0 мин0.15 сек Григорий Рубцов,
Большие таблицы работают Построение индексов масштабируется как O(N 1.2 ), что недалеко от оптимального O(N log N) Использование PARTITIONING улучшает масштабируемость Григорий Рубцов,