Можем ли мы удалить некоторые строки из раздела вместо того, чтобы перебирать все записи большой таблицы? - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в SQL и мире баз данных, и я столкнулся с такой ситуацией:

У меня есть секционированная таблица по дням: каждый день создается раздел и собирает все строки, добавленные в этот день.

Но сейчас мы пытаемся уменьшить объем данных, поскольку размер БД увеличивается, поэтому мы решили удалить некоторые строки на основе некоторых условий.

то, что мы пытаемся do is: удалить только несколько строк неиспользованных данных за последние 2 дня. поэтому мой вопрос:

Можем ли мы удалить несколько строк из раздела? если так, удаляет ли это данные из фактической таблицы и освобождает ли некоторое пространство? пример:

  delete from MyTable where condition1 and time >= (sysdate -2) ;
  -- is it the same as (from a performance perspective)
  delete from Mytable partition (MyTble_Partition) where condition1; 

В этом случае требуется фрагментация или перестроение индексов после удаления некоторых строк?

Пожалуйста, исправьте меня, если я говорю глупости. Буду благодарен за любые указания, заранее спасибо.

1 Ответ

0 голосов
/ 17 апреля 2020

Главное правило: у вас почти никогда нет причин для явного доступа к разделу.
Ваши предикаты (условия соединения \ где) должны предоставлять всю необходимую информацию в базу данных для правильного нацеливания только на нужные разделы.
Если вы хотите чтобы удалить некоторые данные за последние 2 дня, тогда ДА, можно передать время> = предикат. Oracle.
будет сканировать только необходимый раздел. Вам не нужно перестраивать индексы. Эта работа будет выполнена СУБД.

Ваш следующий вопрос - очистка данных, чтобы иметь больше места. Это немного сложно.
Вы должны представить каждый раздел вашей таблицы как "независимую таблицу" в БД.
Во многих аспектах это так.
Когда вы делаете DELETE, вы не получаете свободного места на твой жесткий диск. Вы просто получаете некоторое «свободное пространство» на вашем столе. Вы можете использовать это пространство для дальнейших вставок.
Но (внимание!) Вы должны знать, что вы действительно хотите добавить некоторые записи в раздел "тот старый день" в будущем.
Если нет тогда вы не получите прибыль от DELETE. Совсем.

Также прочитайте эту статью, чтобы понять, как освободить реальное дисковое пространство после удаления строк таблицы

...