Максимальное количество записей в таблице базы данных MySQL

Каков верхний предел записей для таблицы базы данных MySQL. Мне интересно про поле автоинкремента. Что произойдет, если я добавлю миллионы записей? Как справляться с подобными ситуациями? Спасибо!


person xpepermint    schedule 26.04.2010    source источник
comment
По крайней мере, если используется память, ограничение устанавливается механизмом хранения, поэтому (например) с использованием MyISAM вы получаете другое ограничение по сравнению с использованием InnoDB.   -  person Jerry Coffin    schedule 26.04.2010
comment
@ Луковый рыцарь: Я не согласен. Вставлять миллионы строк в одну таблицу - это нормально, а некоторые базы данных имеют ограничение, поэтому стоит спросить. Если кто-то спросит, поддерживает ли MySQL миллионы таблиц, то это, вероятно, признак архитектурной ошибки.   -  person Bill Karwin    schedule 27.04.2010


Ответы (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

person KM.    schedule 26.04.2010
comment
2147483647 max, поэтому вам нужно сделать автоинкремент bigint, только если вы работаете с несколькими миллиардами записей? (что, вероятно, заставило бы ваши операторы select расплавиться задолго до этого) - person Kzqai; 26.04.2010
comment
@Tchalvak для подписанного int, прочтите документацию mysql. - person Leandro Bardelli; 20.07.2012
comment
Контекст вопроса заключается в том, может ли поле автоматического увеличения обрабатывать большое количество строк, а не в ограничениях других ресурсов - person KM.; 15.05.2013
comment
Плакат не спрашивает о числовых или каких-либо других типах данных. . Я действительно не понимаю, как это можно отметить как правильный ответ. Хотя я должен признать, что вопрос неоднозначен, мы должны различать тип данных PK и максимальное количество строк для таблицы. - person Bery; 15.01.2015
comment
@Bery, OP выделил то, что им было нужно, выбрав это в качестве своего ответа. По-видимому, их интересовала емкость поля автоматического увеличения, о которой идет речь в моем ответе, а не ограничения других ресурсов. - person KM.; 05.06.2015
comment
Тем не менее, вопрос заключается в ограничении количества записей в таблице, а не в максимальном значении типа данных, поскольку максимум беззнакового bigint не обязательно должен быть равен максимальному количеству записей. Другими словами, изменение вашего ПК на bigint может не дать вам ожидаемого количества записей. - person Bery; 23.06.2015
comment
@Bery, как ты можешь сказать, о чем идет речь? Вопрос не совсем ясен, но только OP знает, что им было нужно. Я бы сказал, что, выбрав этот ответ OP, я ответил, что им было нужно. - person KM.; 20.07.2015
comment
Привет, пожалуйста, посмотрите ответ @Bill Karwin, прежде чем уходить с этой страницы. - person Ankit Arora; 04.12.2018
comment
@ KM. Неважно, за что проголосовал OP, это все равно не ответ на вопрос. Бери. Все очень ясно, самое первое предложение конкретное и ясное. - person John Stock; 27.05.2020

Наибольшее значение целого числа имеет мало общего с максимальным количеством строк, которое вы можете сохранить в таблице.

Это правда, что если вы используете 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 ТБ. Но я думаю, вы обнаружите, что другие факторы производительности делают это нежелательным задолго до того, как вы увеличите таблицу до такого размера.

person Bill Karwin    schedule 26.04.2010
comment
дерьмо - я бы хотел прочитать это раньше ... Я только что превысил свой размер 64 террабайта на одном из моих столов, и теперь моя система настолько медленная! - person JM4; 30.11.2010
comment
2 ^ 32 = 4,294,967,295 и 2 ^ 64 = 18,446,744,073,709,551,615, так что ... Наибольшее целочисленное значение имеет отношение к максимальному количеству строк. Не обязательно первичный ключ. - person teynon; 15.01.2013
comment
@Tom: MyISAM практически не имеет значения. - person Bill Karwin; 15.01.2013
comment
MyISAM не имеет значения, по какой причине? Учитывая, что MyISAM используется по умолчанию, и многие пользователи даже не осознают, что существуют разные параметры базы данных, я бы сказал, что большой процент его использует, что означает, что он имеет довольно важное значение для этого вопроса. - person teynon; 15.01.2013
comment
@Tom, InnoDB является механизмом хранения по умолчанию в MySQL 5.5 и является лучшим выбором в 99% случаев. - person Bill Karwin; 15.01.2013
comment
Есть еще несколько классических приложений, которые интенсивно используют полнотекстовые индексы, эквивалент в InnoDB был добавлен только в MySQL 5.6.4. dev.mysql. com / doc / refman / 5.6 / en / - person Ext3h; 30.01.2014
comment
@ Ext3h, Sphinx Search обычно лучше, чем полнотекстовые индексы в MyISAM или InnoDB. - person Bill Karwin; 31.01.2014
comment
Для mysql 8 ограничение составляет 256 ТБ при размере страницы 64 КБ. - person UselesssCat; 26.12.2017
comment
Если предел количества строк в таблице MySQL четко определен и находится перед значением bigint, скажем, 18,000,000,000,000,000,000, тогда какова цель bigint? Причина в том, что они могут использоваться в сегментированных архитектурах для однозначной идентификации объекта? Спасибо! - person tonix; 26.10.2020
comment
@tonix Практический ответ заключается в том, что 64-битное целое число легко сохранить в длинном целочисленном типе в коде C ++. Кроме того, помимо первичных ключей используются целые числа. - person Bill Karwin; 26.10.2020
comment
@ JM4 Ваш комментарий выше был иронией в 2010 году, но сегодня, в 2021 году, мои коллеги действительно просят Amazon расширить лимит размера облачного экземпляра с 64 ТиБ до 256 ТиБ. Какая разница в 11 лет! - person Bill Karwin; 08.06.2021

Я предлагаю никогда не удалять данные. Не говорите, что если таблицы длиннее 1000, обрежьте конец таблицы. В вашем плане должна быть настоящая бизнес-логика, например, как долго этот пользователь неактивен. Например, если он превышает 1 год, поместите их в другую таблицу. Это должно происходить еженедельно или ежемесячно в сценарии обслуживания посреди медленного времени.

Когда вы сталкиваетесь с большим количеством строк в своей таблице, вам следует начать сегментирование таблиц или разделение и помещать старые данные в старые таблицы по годам, например, users_2011_jan, users_2011_feb, или использовать числа за месяц. Затем измените свое программирование, чтобы работать с этой моделью. Возможно, создайте новую таблицу с меньшим количеством информации, чтобы суммировать данные в меньшем количестве столбцов, а затем обращаться к более крупным секционированным таблицам только тогда, когда вам нужно больше информации, например, когда пользователь просматривает свой профиль. Все это следует очень тщательно продумать, чтобы в будущем не было слишком дорого для повторного факторинга. Вы также можете поместить только пользователей, которые постоянно заходят на ваш сайт, в одну таблицу, а пользователей, которые никогда не заходят на ваш сайт, в архивный набор таблиц.

person PHPGuru    schedule 15.04.2012
comment
В этом отношении очень полезно взглянуть на разделение MySQL: dev. mysql.com/doc/refman/5.6/en/partitioning.html - person Wim Deblauwe; 14.04.2015

В InnoDB с ограничением размера таблицы в 64 терабайта и ограничением размера строки MySQL в 65 535 строк может быть 1 073 741 824 строки. Это будет минимальное количество записей, использующее ограничение на максимальный размер строки. Однако можно добавить больше записей, если размер строки меньше.

person Xylo    schedule 21.06.2013
comment
какой размер жесткого диска требуется для хранения такого количества (1 073 741 824) строк с ограничением строки 65 535? пожалуйста предложите - person davidb; 15.11.2017
comment
Требуемый размер жесткого диска не может быть определен только на основе количества строк и размера строки. Размер самой таблицы составит 64 терабайта. Однако данные столбцов TEXT и BLOB хранятся отдельно от строки и требуют дополнительного места. Кроме того, это будет зависеть от количества и типа столбцов TEXT и BLOB, поскольку размер зависит от типа. Существует четыре типа столбцов TEXT, а именно: TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT. Есть также четыре типа столбцов BLOB, а именно: TINYBLOB, MEDIUMBLOB, BLOB и LONGBLOB. - person Xylo; 16.11.2017

Согласно разделу "Масштабируемость и ограничения" в http://dev.mysql.com/doc/refman/5.6/en/features.html, поддержка MySQL для больших баз данных. Они используют MySQL Server с базами данных, которые содержат 50 миллионов записей. Некоторые пользователи используют MySQL Server с 200 000 таблиц и около 5 000 000 000 строк.

person Data    schedule 14.08.2013
comment
это может помочь, если вы также сообщите нам, какое оборудование они использовали - person my account_ram; 01.09.2013
comment
Действительно, вы правы. Но, к сожалению, «они» ничего не сказали об оборудовании. - person Data; 30.09.2013
comment
@myaccount_ram, извините за некромант, но если это полезно, я видел менее теоретические, более практические ограничения производственного MySQL в действии. Я видел базу данных, которая содержит ~ 18 миллиардов строк на 2x экземплярах AWS db.r4.16xlarge (1 читатель, 1 писатель). Каждая из машин имела 64 ядра ЦП, 488 ГБ оперативной памяти, сетевой канал 25 Гбит / с, 64 ТБ диска. Этот масштаб БД выдвигал ограничения на размер ЦП и диска, и AWS не предоставляет более крупных инстансов, оптимизированных для БД. Она была заменена более простой схемой БД, которая не требовала такого количества строк. - person Skylar Brown; 14.07.2020

Ограничения размера строки

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. ».
  • В разных форматах хранения используются разные объемы данных заголовка и трейлера страницы, что влияет на объем памяти, доступный для строк.
person Saurabh Chandra Patel    schedule 22.11.2016

Ссылка 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

person Md Nazrul Islam    schedule 16.01.2017

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

person 9jamkt    schedule 21.12.2011
comment
Удаление строк, которые, по вашему мнению, «не используются», опасно и вызывает гораздо больше проблем, чем решает. Предыдущий разработчик в одном из моих проектов реализовал сценарий, который удалял тележки для покупок старше трех дней, полагая, что поступает правильно. Угадайте, что это вызывает проблемы еженедельно. Удаляйте данные только в том случае, если это действительно необходимо. - person Ben Hitchcock; 07.01.2014
comment
худший случай, когда кто-то начинает хранить пути к файлам в базе данных ... сено, куда делись все мои файлы проекта .... у меня есть небольшой проект, который начинается с файлов 3.5M, угадайте, что ... они не все часто используется. - person Kendrick; 10.04.2015