Как быстрее создавать индексы - PullRequest
6 голосов
/ 24 июля 2011

У меня есть таблица размером 60 ГБ , и я пытаюсь создать индекс , и он очень медленный (почти день, и все еще работает!)

Я вижу, что большую часть времени находится на дисковых операциях ввода / вывода (4 МБ / с), и он не использует слишком много памяти или процессора

Я пытался: запустить 'pragma cache_zise = 10000' и 'pragma page_zise = 4000 '(после того, как я создал таблицу), и она все еще не помогает.

Как я могу заставить' create index 'работать в разумные сроки?

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

Создание индекса для таблицы базы данных является однократной операцией и может быть дорогостоящим в зависимости от многих факторов, начиная от того, сколько полей и какого типа включены в индекс, и размера таблицы данных, которая должна быть проиндексирована.аппаратное обеспечение компьютера, на котором работает база данных, и, возможно, даже больше.

Чтобы дать разумный ответ на вопрос ускорения, нам нужно знать схему таблицы, определение индекса, который вы используете.Создаете ли вы разумную уверенность, если вы включаете уникальность в свой индекс, что данные на самом деле уникальны, каковы аппаратные характеристики вашего сервера, каковы ваши скорости дисков, сколько свободного места на дисках, вы используете рейдмассив, какой уровень рейда, сколько у вас оперативной памяти и какова степень использования.и т.д. ...

Теперь все, что сказано, может быть и быстрее, но я не проверял.

создать структурно дублирующуюся таблицу из таблицы, которую вы хотите проиндексировать.Добавьте индекс в новую пустую таблицу.скопируйте данные из старой таблицы в новую таблицу кусками.отбросьте старую таблицу.

Моя теория состоит в том, что индексировать данные по мере их добавления будет дешевле, чем копать уже существующие данные и добавлять индекс после факта.

0 голосов
/ 03 апреля 2015

Когда вы создаете таблицу, вы должны создать индекс. PS: вы должны считать, что индекс работает правильно. И вам не нужно создавать индекс во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...