Каков верхний предел записей для таблицы базы данных MySQL. Мне интересно про поле автоинкремента. Что произойдет, если я добавлю миллионы записей? Как справляться с подобными ситуациями? Спасибо!
Максимальное количество записей в таблице базы данных MySQL
Ответы (8)
Типы mysql int могут содержать довольно много строк: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html.
беззнаковое int
наибольшее значение 4,294,967,295
беззнаковое bigint
наибольшее значение 18,446,744,073,709,551,615
Наибольшее значение целого числа имеет мало общего с максимальным количеством строк, которое вы можете сохранить в таблице.
Это правда, что если вы используете int или bigint в качестве первичного ключа, у вас может быть столько строк, сколько уникальных значений в типе данных вашего первичного ключа, но вам не нужно делать первичный ключ целым числом. , вы можете сделать его СИМВОЛОМ (100). Вы также можете объявить первичный ключ для нескольких столбцов.
Помимо количества строк, существуют и другие ограничения на размер таблицы. Например, вы можете использовать операционную систему с ограничением размера файла. Или у вас может быть жесткий диск емкостью 300 ГБ, на котором можно хранить только 300 миллионов строк, если размер каждой строки составляет 1 КБ.
Пределы размера базы данных действительно высоки:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
Механизм хранения MyISAM поддерживает 2 32 строки на таблицу, но вы можете создать MySQL с параметром --with-big-tables
, чтобы он поддерживал до 2 64 строк на таблицу.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
Механизм хранения InnoDB имеет внутренний 6-байтовый идентификатор строки для каждой таблицы, поэтому максимальное количество строк равно 2 48 или 281 474 976 710 656.
Табличное пространство InnoDB также имеет ограничение на размер таблицы в 64 терабайта. Сколько строк в него помещается, зависит от размера каждой строки.
Предел 64 ТБ предполагает размер страницы по умолчанию 16 КБ. Вы можете увеличить размер страницы и, следовательно, увеличить табличное пространство до 256 ТБ. Но я думаю, вы обнаружите, что другие факторы производительности делают это нежелательным задолго до того, как вы увеличите таблицу до такого размера.
bigint
, скажем, 18,000,000,000,000,000,000
, тогда какова цель bigint
? Причина в том, что они могут использоваться в сегментированных архитектурах для однозначной идентификации объекта? Спасибо!
- person tonix; 26.10.2020
Я предлагаю никогда не удалять данные. Не говорите, что если таблицы длиннее 1000, обрежьте конец таблицы. В вашем плане должна быть настоящая бизнес-логика, например, как долго этот пользователь неактивен. Например, если он превышает 1 год, поместите их в другую таблицу. Это должно происходить еженедельно или ежемесячно в сценарии обслуживания посреди медленного времени.
Когда вы сталкиваетесь с большим количеством строк в своей таблице, вам следует начать сегментирование таблиц или разделение и помещать старые данные в старые таблицы по годам, например, users_2011_jan, users_2011_feb, или использовать числа за месяц. Затем измените свое программирование, чтобы работать с этой моделью. Возможно, создайте новую таблицу с меньшим количеством информации, чтобы суммировать данные в меньшем количестве столбцов, а затем обращаться к более крупным секционированным таблицам только тогда, когда вам нужно больше информации, например, когда пользователь просматривает свой профиль. Все это следует очень тщательно продумать, чтобы в будущем не было слишком дорого для повторного факторинга. Вы также можете поместить только пользователей, которые постоянно заходят на ваш сайт, в одну таблицу, а пользователей, которые никогда не заходят на ваш сайт, в архивный набор таблиц.
В InnoDB с ограничением размера таблицы в 64 терабайта и ограничением размера строки MySQL в 65 535 строк может быть 1 073 741 824 строки. Это будет минимальное количество записей, использующее ограничение на максимальный размер строки. Однако можно добавить больше записей, если размер строки меньше.
Согласно разделу "Масштабируемость и ограничения" в http://dev.mysql.com/doc/refman/5.6/en/features.html, поддержка MySQL для больших баз данных. Они используют MySQL Server с базами данных, которые содержат 50 миллионов записей. Некоторые пользователи используют MySQL Server с 200 000 таблиц и около 5 000 000 000 строк.
The maximum row size for a given table is determined by several factors:
Внутреннее представление таблицы MySQL имеет максимальный размер строки 65 535 байт, даже если механизм хранения способен поддерживать строки большего размера. Столбцы BLOB и TEXT вносят вклад в ограничение размера строки только от 9 до 12 байтов, поскольку их содержимое хранится отдельно от остальной части строки.
Максимальный размер строки для таблицы InnoDB, которая применяется к данным, хранящимся локально на странице базы данных, составляет чуть меньше половины страницы. Например, максимальный размер строки немного меньше 8 КБ для размера страницы InnoDB по умолчанию 16 КБ, который определяется параметром конфигурации innodb_page_size. «Ограничения для таблиц InnoDB».
- Если строка, содержащая столбцы переменной длины, превышает максимальный размер строки InnoDB, InnoDB выбирает столбцы переменной длины для внешнего внестраничного хранилища, пока строка не будет соответствовать пределу размера строки InnoDB. Объем данных, хранящихся локально для столбцов переменной длины, которые хранятся вне страницы, зависит от формата строки. Для получения дополнительной информации см. «InnoDB Row Storage и Row Formats. ».
- В разных форматах хранения используются разные объемы данных заголовка и трейлера страницы, что влияет на объем памяти, доступный для строк.
Ссылка http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
Пределы размера строки
Максимальный размер строки для данной таблицы определяется несколькими факторами:
Внутреннее представление таблицы MySQL имеет максимальный размер строки 65 535 байт, даже если механизм хранения способен поддерживать строки большего размера. Столбцы BLOB и TEXT вносят вклад в ограничение размера строки только от 9 до 12 байтов, поскольку их содержимое хранится отдельно от остальной части строки.
Максимальный размер строки для таблицы InnoDB, которая применяется к данным, хранящимся локально на странице базы данных, составляет чуть меньше половины страницы для настроек innodb_page_size 4 КБ, 8 КБ, 16 КБ и 32 КБ. Например, максимальный размер строки немного меньше 8 КБ для размера страницы InnoDB по умолчанию 16 КБ. Для страниц размером 64 КБ максимальный размер строки немного меньше 16 КБ. См. Раздел 15.8.8, «Ограничения таблиц InnoDB».
Если строка, содержащая столбцы переменной длины, превышает максимальный размер строки InnoDB, InnoDB выбирает столбцы переменной длины для внешнего внестраничного хранилища, пока строка не будет соответствовать пределу размера строки InnoDB. Объем данных, хранящихся локально для столбцов переменной длины, которые хранятся вне страницы, зависит от формата строки. Для получения дополнительной информации см. Раздел 15.11, «Хранилище строк и форматы строк InnoDB».
В разных форматах хранения используются разные объемы данных заголовка и трейлера страницы, что влияет на объем памяти, доступный для строк.
Для получения информации о форматах строк InnoDB см. Раздел 15.11, «Хранилище строк и форматы строк InnoDB» и Раздел 15.8.3, «Физическая структура строк таблиц InnoDB».
Для получения информации о форматах хранения MyISAM см. Раздел 16.2.3, «Форматы хранения таблиц MyISAM».
http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
Нет предела. Это зависит только от вашей свободной памяти и максимального размера файла системы. Но это не значит, что вам не следует принимать меры предосторожности при решении проблемы использования памяти в вашей базе данных. Всегда создавайте скрипт, который может удалять неиспользуемые строки или сохранять общее количество строк в пределах определенной цифры, скажем, тысячи.