MySQL - основная проблема с большой таблицей - PullRequest
1 голос
/ 16 сентября 2011

В моей БД две большие таблицы. Первый (A) имеет 1,7 миллиона строк, второй (B): 2,1 миллиона. Записи в A и B имеют довольно идентичный размер.

Я могу сделать любую операцию над A. Это требует времени, но это работает. На Б я ничего не могу сделать. Даже простой выбор счетчика (*) зависает навсегда. Проблема в том, что я не вижу никакой ошибки: он просто зависает (когда я показываю список процессов, он просто говорит «обновление» навсегда).

Мне кажется странным, что небольшая дельта (в процентном отношении) между 1,7 и 2,1 млн. Может иметь такое значение (от возможности делать все, даже до невозможности выполнения самой простой операции).

Может ли быть жесткий предел в 2 миллиона строк?

Я в Linux 2.6+ и использую innoDB.

Спасибо! Pierre

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

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

http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

0 голосов
/ 18 сентября 2011

Как я уже говорил в своем первом посте, две таблицы были довольно схожими, поэтому размер строк в обеих таблицах был бы довольно близок.Вот почему я был немного удивлен, и я начал думать, что, может быть, где-то был установлен предел в 2 миллиона.

Оказывается, моя таблица была повреждена.Это странно, так как я все еще был в состоянии получить доступ к некоторым записям (используя соединения с другими таблицами), и MySQL не «жаловался».Я выяснил это, выполнив команду CHECK TABLE: она не возвращала никакой ошибки, но каждый раз вылетала mysqld ...

В любом случае, спасибо всем за помощь в этом.

Pierre

0 голосов
/ 16 сентября 2011

Размер строки (количество байтов, необходимое для хранения одной строки) может быть намного больше для второй таблицы.Для подсчета (*) может потребоваться полное сканирование таблицы - то есть чтение всей таблицы на диске - большие строки означают больше операций ввода-вывода и более продолжительное время.

Наличие / отсутствие индексов, вероятно, также будет иметь значение.

...