Запрос для расчета Mysql максимальный размер строки - PullRequest
0 голосов
/ 10 февраля 2020

Скажем, у меня есть таблица БД с 5 полями.

id bigint(20)
name varchar(255)
place varchar(255)
DOB date
about TEXT

Максимальный размер строки составляет 65535 байт в MySQL, который используется всеми столбцами таблицы, кроме столбцов TEXT / BLOB.

Мне нужен запрос, который даст мне максимальный размер строки в байтах для этой таблицы, чтобы я мог проверить, превышает ли максимальный размер 65535. Используется кодировка utf8mb4. Мне нужно что-то вроде этого

(20 * 8 + 255 * 4 + 255 * 4 + 3) = 2203 размер поля about игнорируется, поскольку тип TEXT.

1 Ответ

0 голосов
/ 16 февраля 2020

Это намного проще - напишите и выполните оператор CREATE TABLE. Он будет плевать на вас, если он слишком большой.

Между тем, в вашей попытке некоторые из fl aws:

  • BIGINT - 8 байтов; (20) - бесполезная информация.

  • Каждому VARCHAR требуется 1 или 2 байта для поля длины.

  • TEXT занимает некоторое пространство до предела 64K.

  • Для каждого столбца и строки есть куча "накладных расходов", поэтому пытаться вычислить длину действительно нецелесообразно.

  • Обратите внимание также - когда длина становится слишком большой, некоторые из VARCHARs могут рассматриваться как TEXT. То есть они не обязательно будут учитываться в пределе 64K. Однако они оставят на своем месте 20-байтовый указатель.

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

  • BIGINT редко требуется; используйте меньший тип int.
  • Не используйте вслепую (255), у него есть несколько недостатков. Проанализируйте свои данные и выберите более реалистичный предел c.
  • Имейте в виду, что существует четыре ROW_FORMATs. DYNAMIC, вероятно, оптимально для вас. (В старых версиях MySQL не было Dynamic.
  • Параллельные таблицы (две таблицы с одним и тем же PK)
  • Нормализация (Замена общей строки на меньший INT.)
  • Не используйте группу столбцов в качестве «массива», создайте другую таблицу. (Пример: 3 столбца номера телефона).

Вы уже достигли каких-либо ограничений INDEX? Пахнет, как будто тебя это тоже укусило. Запиши CREATE TABLE, включая предварительные индексы. Мы разжеваем и посоветуем тебе.

...