powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создать индекс огромной таблицы
22 сообщений из 22, страница 1 из 1
Создать индекс огромной таблицы
    #38381088
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Есть таблица, состоящая из 6 млрд записей. Нужно добавить индекс по одному из столбцов (тип integer). Пробовал делать
Код: sql
1.
2.
ALTER TABLE `mca`.`raw_data` 
ADD INDEX `case_index` (`case_index` ASC) ;

MySQL задумался на неделю, в итоге ничего не сделал (наверное, таймаут какой-то вышел, хз).
Нагуглил "Fast Index Creation". Подскажите, пожалуйста, пример, как в моем случае можно этот подход применить.

Заранее большое спасибо!
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38381761
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой движок у таблицы?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382031
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Движок InnoDB.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382036
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368,

Покажите полный DDL таблицы.
Во время создания индекса еще какая-нибудь нагрузка была? Данная таблица еще как либо использовалась?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382103
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации под fast index creation для innodb подразумевалось, что создание ДВУХ индексов одним оператором ALTER одновременно может быть быстрее чем последовательное создание. Так что не поможет ничем.

Почему было принято решение хранить в innodb ?
Если это данные с автоматики не связанные с финансами и чем-то эдаким, то может не мучаться и хранить в myisam ?
В низкоконкурентной среде и с небольшим объемом памяти myisam почти всегда выигрывает.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382109
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TABLE `raw_data` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`case_index` int(10) DEFAULT NULL,
`index_in_case` tinyint(3) unsigned DEFAULT NULL,
`ampl` float DEFAULT NULL,
`ph` float DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6614310478 DEFAULT CHARSET=latin1$$

Это вывод MySQL Workbench на запрос ПК по таблице - Copy to Clipboard - Create Statement.

Во время создания индекса не было никакой нагрузки, ничего не выполнялось (смотрел при помощи show processlist, хотя я и без него знаю, что я ничего не запускал).
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382122
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этор данные моделирования работы электрической схемы, я их храню в MySQL, потом - обрабатываю с помощью скриптов на Python'e. В них уже ничего не вносится, только выборка данных по определённым критериям. Вот для одной из выборок тут предложили создать индекс по полю "case_index". Вот я и пытаюсь это сделать.
Насчёт MyISAM или InnoDB - я с БД новичёк, подскажите почему в данном случае лучше MyISAM.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382144
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368, у вас вообще фактически однопользовательская система ?
Опасно делать обобщения, но в вашем случае рискну предположить, что все же будет лучше использовать myisam.
Система у вас однопользовательская ведь. Не забудьте подкрутить настройку key_buffer_size.

Действительно в одной электрической схеме можно найти первичных фактов для бд на 365 гб ?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382163
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, система однопользовательская.
Насчёт размера - в БД хранятся частотные характеристики (графики АЧХ и ФЧХ) схемы из 48 элементов, номиналы которых варьировались независимо один от другого, методом перебора. Всего получилось 65 млн комбинаций номиналов элементов схемы. Для каждой комбинации хранятся значения модуля и фазы для 101 частоты. Итого имеем более 6 млрд строк в таблице. Тут можно примерно в 4 раза уменьшить кол-во данных (есть повторяющиеся из-за симметричности схемы), но для того чтоб с такой огромной таблицей получалось работать и пытаюсь создать индекс. Примерно так.
Ладно, буду пробовать перейти на MyISAM, попробую там.
З.Ы. это часть научного исследования в университете, аспирантура.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382175
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE `raw_data` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `case_index` int(10) DEFAULT NULL,
  `index_in_case` tinyint(3) unsigned DEFAULT NULL,
  `ampl` float DEFAULT NULL,
  `ph` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6614310478 DEFAULT CHARSET=latin1$$



Это вывод MySQL Workbench на запрос ПК по таблице - Copy to Clipboard - Create Statement.

Во время создания индекса не было никакой нагрузки, ничего не выполнялось (смотрел при помощи show processlist, хотя я и без него знаю, что я ничего не запускал).Объясните, пожалуйста, с какой целью создаются 2 одинаковых индекса?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382201
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Объясните, пожалуйста, с какой целью создаются 2 одинаковых индекса?тут у кого-то недавно воркбенч уже чудил...
kt368,
Код: sql
1.
show create table raw_data

то же самое выдаёт, или там всё же этого "unique key" нет?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382214
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368, мне кажется такие задачи не решаются с помощью python и mysql. Как-то же проектируют схемы с гораздо большим числом элементов. Наверняка, такие САПР все в памяти держат и используют какие-то алгоритмы для исключения полного перебора.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382216
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответ для tanglir :
Сейчас пока не могу это проверить, запустил команду преобразования таблицы из InnoDB в MyISAM.
Да, а подскажите ещё,
Код: sql
1.
alter table tbl1 ENGINE=MyISAM;


Сначала создаст новую таблицу с движком MyISAM, а потом скопирует все из старой таблицы в новую, удалит старую и переименует новую в tbl1? Т.е. если моя таблица весит 365 Гб, то для операции смены движка мне нужно ещё хотя бы 365 Гб пустого пространства на диске?
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382219
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О, выдало ошибку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ERROR 1206: The total number of locks exceeds the lock table size
SQL Statement:
ALTER TABLE `mca`.`raw_data` ENGINE = MyISAM

ERROR: Error when running failback script. Details follow.

ERROR 1050: Table 'raw_data' already exists
SQL Statement:
CREATE TABLE `raw_data` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `case_index` int(10) DEFAULT NULL,
  `index_in_case` tinyint(3) unsigned DEFAULT NULL,
  `ampl` float DEFAULT NULL,
  `ph` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6614310478 DEFAULT CHARSET=latin1
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382249
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368 Т.е. если моя таблица весит 365 Гб, то для операции смены движка мне нужно ещё хотя бы 365 Гб пустого пространства на диске?
возможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382289
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwindkt368, мне кажется такие задачи не решаются с помощью python и mysql. Как-то же проектируют схемы с гораздо большим числом элементов. Наверняка, такие САПР все в памяти держат и используют какие-то алгоритмы для исключения полного перебора.
Может быть, не уверен. Мне нужно исследовать форму АЧХ и ФЧХ большого количества вариантов комбинаций, я как мог минимизировал кол-во этих комбинаций при создании на питоне списка комбинаций параметров элементов, но всё учесть не смог. Считал в Micro-Cap, запуская его питоном через интерфейс командной строки, при этом подсовывал Micro-Cap'у файлик с параметрами. Микрокап генерировал текстовые файлы с численными значениями АЧХ и ФЧХ, которые питон вводил в БД MySQL. Вот теперь у меня такая огромная таблица.
[quot tanglir]Cygapb-007
Код: sql
1.
show create table raw_data

то же самое выдаёт, или там всё же этого "unique key" нет?Вот что он выдает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE `raw_data` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `case_index` int(10) DEFAULT NULL,
  `index_in_case` tinyint(3) unsigned DEFAULT NULL,
  `ampl` float DEFAULT NULL,
  `ph` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6614310478 DEFAULT CHARSET=latin1


netwindвозможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб.Вот чёрт, надо где-то места раздобыть...
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382296
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368netwindвозможно немного меньше, ведь это myisam, но порядки примерно те же. я думаю никак не меньше 300 гб.Вот чёрт, надо где-то места раздобыть...Так для индекса тоже места надо немало. Конечно, не столько же, но, на глазок, примерно половину от размера таблицы.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382318
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полуоффтоп:
Я бы для такой задачи использовал плоский файл, а не таблицу в БД.
Тогда поле `id`, вероятно, стало бы не нужно. От `case_index` можно было бы избавиться позиционированием блоков данных с шагом в 100 условных записей.
Тогда и объем хранимых данных заметно сократился бы. А некоторые операции поиска выполнялись бы за константное время, а не логарифмическое, как в БД.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382377
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368,

аспирантура... странно как-то всё это.

1. 65млн комбинаций параметров к 48 элементам... может быть... но сразу возникает вопрос: а метод "градиентного спуска" не применим совсем или это после него столько осталось? (ежели бы я так оптимизировал оптические схемы в свою практику - наверное кое-что, до сих пор обсчитывалось, а не стояло где надо)

2. надо исследовать форму АЧХ и ФЧХ ... это понятно, но сразу возникает другой вопрос: их надо исследовать во взаимосвязи или это можно делать последовательно?

если да, тогда непонятен предыдущий вопрос по выборке по 101 записи... взаимосвязи исследуются "поперек" частотного разреза - по параметрам... и потребуется "другой" индекс.

если нет - то зачем пихать все АЧХ и ФЧХ в одну таблицу? Получили в микрокапе результат - исследовали, получаем следующий... он вроде как на это даже заточен... нет? Если надо "потом" сравнивать результаты, то опятьже правильнее их и собирать в одну таблицу... да и сравнивать проще, нет?

3. запустить и пересчитать через тот же скрипт на Питоне - дорого и невозможно? Если это можно повторить, то создайте табличку со всеми нужными индексами сразу в MyISAM и "в путь"... по второму разу. Это по-крайней мере не потребует реконфигурации всей системы (я так понимаю, что "лишних" 300-700 гектаров в ней нет)...

... не знаю, может я и не прав... но как-то странно всё.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382418
kt368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109kt368,
1. 65млн комбинаций параметров к 48 элементам... может быть... но сразу возникает вопрос: а метод "градиентного спуска" не применим совсем или это после него столько осталось?Незнаю как его прикрутить к моей задаче. Мне нужно именно иметь на винчестере все таблицы с данными АЧХ и ФЧХ, чтоб потом можно было их по-разному исследовать, например определить минимальное количество частот, на которых нужно провести измерение частотной характеристики для того, чтоб по полученным данным можно с заданной погрешностью аппроксимировать эту частотную характеристику, чтоб не пропустить на частотной характеристики какие-то "интересные" моменты, перегибы, и т.д.
Arhat1092. надо исследовать форму АЧХ и ФЧХ ... это понятно, но сразу возникает другой вопрос: их надо исследовать во взаимосвязи или это можно делать последовательно?Можно последовательно
Arhat109если да, тогда непонятен предыдущий вопрос по выборке по 101 записи... взаимосвязи исследуются "поперек" частотного разреза - по параметрам... и потребуется "другой" индекс.Вы меня не так поняли, каждая частотная характеристика (для каждой комбинации параметров элементов схемы) состоит из 101-го значения, вот их я и выбираю. Все это в одной таблице, поле case_index содержит счётчик комбинаций, т.е. для определённой комбинации (например номер 1) есть 101 строка со значением case_index=1. Для комбинации номер 2, соответственно есть 101 строка с case_index=2. и т.д.
Arhat109если нет - то зачем пихать все АЧХ и ФЧХ в одну таблицу? Получили в микрокапе результат - исследовали, получаем следующий... он вроде как на это даже заточен... нет? Если надо "потом" сравнивать результаты, то опятьже правильнее их и собирать в одну таблицу... да и сравнивать проще, нет?Потому что пока моделировалось я придумывал алгоритмы, по которым можно исследовать эти частотные характеристики. Теперь у меня есть база с АЧХ и ФЧХ, и я хочу над ними проводить разные "эксперименты" - получать разные интегральные параметры.
Arhat1093. запустить и пересчитать через тот же скрипт на Питоне - дорого и невозможно? Если это можно повторить, то создайте табличку со всеми нужными индексами сразу в MyISAM и "в путь"... по второму разу. Это по-крайней мере не потребует реконфигурации всей системы (я так понимаю, что "лишних" 300-700 гектаров в ней нет)...Ой, не хочу, больше месяца считало...лучше где-нибудь раздобуду ещё один винчестер, места есть где его добыть.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382477
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368,

:) Правильно я вас понял... только "задача у вас другая"... вам захотелось собрать все варианты, а потом их исследовать (может как раз аспирантура по методам исследования, а не получению оптимавльного варианту)... собрали - радуйтесь :). Ничего акромя "прикупить" нужного объема - в голову не приходит.
...
Рейтинг: 0 / 0
Создать индекс огромной таблицы
    #38382919
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kt368, попробуйте перевести InnoDB на формат хранения файлов Barracuda со сжатием.

Создайте резервную копию БД и файла my.ini из каталога, где установлен MySQL.
Затем в этот файл, в раздел с параметрами InnoDB нужно добавьте:

innodb_file_per_table
innodb_file_format=Barracuda

После этого нужно перезапустить службу MySQL.
Затем для вышей таблицы (можно также и для всех других таблиц), выполните команду:
Код: sql
1.
2.
3.
ALTER TABLE <name>
ENGINE=InnoDB,
ROW_FORMAT=COMPRESSED
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создать индекс огромной таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]