|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|
Как правильно работать с индексами, и правильно ли удалять из таблицы данные10.07.2023, 00:57. Показов 1339. Ответов 7
Всем привет!
Пытаюсь понять, как правильно проектировать базу данных. И сейчас у меня такой вопрос: как поступать с записями, которые больше не актуальны, и могут быть удалены? Как я поняла, есть две возможные стратегии: 1. Удаляем неактуальные записи, но тогда не используем индексы. Это связанно с тем, что при удалении записи из таблицы, база пересоздает индексы, и это бъет по производительности. Это действительно так уж ощутимо бъет по производительности? 2. Используем индексы, но тогда не удаляем записи, а лишь помечаем их в отдельном столбце как "удаленные". Этот вариант используют даже несмотря на то, что в таблице может скапливаться много неактуальной информации. Но ведь это же не рационально??? В моём случае есть таблица проводок. Количество проводок зависит от активности пользователей, и может достигать значительного количества за короткий промежуток времени. Однако, время жизни проводок относительно невелико, и поэтому, если удалять физически неактуальные записи, тогда в таблице будет сохраняться некоторое относительно небольшое кол-во проводок. Но если их не удалять, а только помечать как удаленные, тогда очень быстро таблица вырастит до гигантских размеров, и при этом в ней 99% всех записей будет неактуальной информацией. Получается, в моем случае предпочтительнее все таки первый вариант?
0
|
|
| 10.07.2023, 00:57 | |
|
Ответы с готовыми решениями:
7
Как правильно загрузить данные из таблицы ms sql ? DGVComboBoxColumn: как правильно присоединить данные из таблицы? |
|
Модератор
|
|
| 10.07.2023, 05:19 | |
|
eva2326, а теперь представьте ситуацию: Вы старательно удаляете записи и все бы хорошо, но... Вот кто-то накосячил, к примеру, с реквизитами, и теперь начальство хочет знать, кого казнить... А Вы не можете этого сказать, так как данные за этот прошедший период уже старательно удалены... Угадайте, кого казнить будут?
Лично мое мнение: данные в базе предназначены для хранения - вот и пусть хранятся. Максимум, что имеет смысл продумать - перенос неактуальных данных в какую-нибудь архивную таблицу, чтобы не перегружать таблицу рабочую...
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||
| 10.07.2023, 05:48 [ТС] | |||
|
У программистов - логи, для разбора полетов, и бэкапы, для восстановления данных. Перенос данных в архивную таблицу подразумевает удаление данных из прежней таблицы. А значит вопрос по первому пункту остается в силе.
0
|
|||
|
Модератор
|
|||
| 10.07.2023, 06:19 | |||
|
0
|
|||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|
| 10.07.2023, 08:13 | |
|
индексы и при вставке записей перестраиваются еще как, может быть еще и поболе чем при удалении. и при изменении ключевых полей, с точки зрения индекса это два в одном - удаление и вставка. и чего - не использовать их? зато при чтении они могут ускорить процесс в десятки раз. так что индексы нужны, но нужно тщательно обдумывать какие. когда удалять и удалять ли вообще сами должны решить
Добавлено через 11 минут add из опыта - в задачах отгрузки и поставки данные накапливались годами, в определенный момент сохранялся бекап и текущее ПО и программно корректно чистилась база, оставляя движения и сопутствующее данные за последние 2-3 года. оставались частично и более ранние не закрытые данные. затрагивалось несколько десятков таблиц. индексы перестраивались
1
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||
| 10.07.2023, 15:24 [ТС] | |||
|
Я думала, что при вставке индексы достраиваются, и это - относительно дешовая операция. А при удалении происходит перестройка индексов, и это уже тяжелая операция. А если при вставке индексы тоже перестраиваются, тогда получается, что обычная вставка - это тоже тяжелая операция. Это как то странно... А если нужно постоянно добавлять/удалять данные, тогда получается, что лучше индексы вообще не использовать? В таком случае от них будет больше вреда, чем пользы?
0
|
|||
|
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
|
||
| 14.07.2023, 16:54 | ||
|
Так, недавно помеченные на удаление данные можно будет еще просмотреть, что-то с ними сделать, а совсем старые грохнуть. Тут можно перед удалением делать бэкап еще. Как дополнение 4 варианта с комбинацией того, что уже предложили. Помеченные на удаление данные, закидывать в архивную таблицу, разом, все что накопилось.
1
|
||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||
| 14.07.2023, 20:31 [ТС] | ||
|
Если вкратце: sqlite использует для интексов B-деревья. А это значит две вещи: 1. Индексы перестраиваются при любых операциях записи в базу. При этом, вставка/удаление примерно одинаковые с точки зрения производительности. 2. Перестройка индексов на самом деле не такая уж медленная операция. Не нужно бояться вносить изменения в данные. А ещё, как я поняла, есть такая общая рекомендация: в первую очередь нужно отталкиваться от задачи. Если по смыслу задачи данные больше не нужны, то и не нужно их держать/копить, только лишь из соображений оптимизации. Ненужные записи можно просто удалять, не беспокоясь об индексах.
1
|
||
| 14.07.2023, 20:31 | |
|
Помогаю со студенческими работами здесь
8
Как правильно сохранить данные полей таблицы
Как правильно сохранить данные в таблицы, чтобы их сразу же можно было использовать? Как правильно удалять документы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|