Удаление пустого места из базы данных

  • Автор темы Marina1706
  • Обновлено
  • 13, May 2024
  • #1
Удаление пустого места из базы данных

Позвольте мне объяснить ситуацию.

Предположим, я создаю новую таблицу со столбцом auto_increment и делаю в нее 3 новые вставки.

Таблица: id, имя

1, Джон

2, Алекс

3, Джет

Затем я удаляю последнюю запись и создаю новую.

Теперь MySQL удалит запись с идентификатором записи «3», но не добавит новую запись с идентификатором «3».

Новая запись будет добавлена с идентификатором записи «4».

Итак, таблица будет выглядеть так:

1, Джон

2, Алекс

4, Сэм

Я думаю, что если в таблице произойдет много удалений, то со временем в базе данных будет создано много таких пустых мест, что в конечном итоге замедлит выполнение запросов «выбрать».

Это верно?

Как я могу решить эту проблему?

Я попытался экспортировать всю таблицу, а затем восстановить ее.

Но в дампе экспорта есть поле идентификатора записи.

Таким образом, даже после экспорта и импорта таблица по-прежнему выглядит так:

1, Джон

2, Алекс

4, Сэм

Я не уверен, присутствует ли нулевой идентификатор записи «3» или нет...

таблица оптимизации тоже не работает.

Это занимает много времени, и при этом истекает срок действия PHP time_limit или mysql исчезает.

Есть идеи? Спасибо

Marina1706


Рег
29 Nov, 2010

Тем
76

Постов
214

Баллов
604
  • 03, Jun 2024
  • #2
Удаленные строки не существуют волшебным образом, они исчезли навсегда. Однако такие базы данных, как MySQL, имеют функцию оптимизации, которая удаляет любые следы удаленных строк, приводит в порядок индексы и т. д.
 

Jenya1


Рег
06 Jul, 2014

Тем
83

Постов
214

Баллов
649
  • 03, Jun 2024
  • #3
@c1lonewolf Спасибо за объяснение. Меня беспокоило только то, что пробелы замедляют выполнение запросов, а поскольку пробелов нет, то это не проблема. Спасибо @sarahk и @mmerlinn, ваши предложения тоже мне помогли. Спасибо
 

Quonsspubrodo


Рег
13 Jun, 2012

Тем
84

Постов
196

Баллов
646
  • 08, Jun 2024
  • #4
@c1lonewolf

Да, я об этом и говорю.

Однако я надеялся, что будет способ заставить MySQL делать это во время вставки, вместо того, чтобы я делал «выбрать плюс обновление» вместо «вставки»...

Каков процесс работы с базой данных с большими пробелами и каковы подводные камни? (кроме двойного запроса на вставку)

Таким образом, множественная вставка в один запрос будет невозможна.

Нравиться:

вставить в таблицу (имя) значения

(«Джон»), («Джит»)… и т. д.

Эти пробелы даже замедляют выборочные запросы, или я просто так предполагаю?

Предположим, в таблице базы данных 10 миллионов записей.

Каждый день удаляется пара тысяч и добавляется пара тысяч.

Эти новые рекорды не заменяют старые рекорды.

Они добавляются новыми, внизу таблицы. Действительно ли эта таблица работает медленнее при запросе «выбрать» или это только мое предположение? Спасибо
 

Hoflex


Рег
21 Jan, 2013

Тем
71

Постов
201

Баллов
596
  • 15, Jun 2024
  • #5
Я называю это переработкой строк. Что вы хотите сделать, так это заменить удаленную информацию новой информацией без изменения индексного номера базы данных для этой таблицы.

Поэтому вам нужно создать строку по умолчанию для всех удаленных записей, например опубликовано, обновлено, имя 0000.00.00, 0000.00.00, имя (настройки ввода по умолчанию) Теперь, когда вы собираетесь удалить запись, вы просто заменяете значения столбца настройками по умолчанию.

Когда вы добавляете новую запись, вы ищете первую запись, содержащую значения по умолчанию, а затем заменяете их новыми. Обратите внимание, что это следует использовать только тогда, когда вы «хочет» это сделать.

Для таблиц базы данных с большими пробелами настройка этого метода немного отличается.

Вы также должны понимать подводные камни.
 

Lylik91


Рег
09 Jul, 2015

Тем
72

Постов
183

Баллов
553
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно