Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Удалить сексции секционированной таблицы.

Добрый день.

Есть огромная таблица, которая секционирована и ее секции лежат в разных файловых группах.

Секционирована она по годам.

Надо как-то удалить старые файлы, соответствующие наиболее старым файловым группам.




Подскажите пожалуйста как это правильно сделать?
Ответ: Еще такой вопрос есть.

На таблицу ссылаются FK (ON DELETE ON UPDATE CASCADE) другие таблицы.

Если секцию переключить и сделать TRUNCATE новой таблицы, из зависимых таблиц удаляться данные?
Вопрос: Секционированные таблицы vs представления

Здравствуйте!

У меня некоторый возврат к теме секционирование предыдущая проблема была описана которая так ничем и незавершилась потому что приоритет у задачи так и не повысился.
Сейчас мне нужно сделать подборку чем секционирование таблиц лучше секционированных представлений (partitioned views)

Вот у меня получилась такая таблица во вложении, может быть кто-нибудь дополнит что-то из своего опыта.

Источники:
1
2

Таблица полностью из документа (1) кроме версий.
Если кто-то использует секционированные представления, поделитесь почему не переходите на секционированные таблицы.

Насколько я понимаю ключевое различие, что с представлением нужно очень много делать вручную и это ключевой минус.

К сообщению приложен файл (TableVsView.xlsx - 12Kb)
Ответ:
Jovanny
Ещё минус секционированных представлений - нельзя применить BULK INSERT.

аха и запросы без предиката поля секцианирования...да куча еще нюансов. Я думаю ооооочень серьезно подумать. Подумал... отложил, потом еще раз подумать.. сходить в отпуск. А вот потом уж принять решение...Шутка, но в каждой шутке есть доля шутки!
Вопрос: Индекс по секционированной таблице

Добрый день, подскажите по секционированию.

Пусть есть таблица BigLog,
create table BigLog (
  id bigint,
  eventtime datetime,
  eventcode varchar(666)
)

Я хочу, чтобы:
1. По полю eventtime был создан кластерный индекс
2. По нему же производилось секционирование
3. ID был некластерным праймери кеем.

Надеюсь, это в принципе возможно, т.к. если по eventtime будет кластерный индекс, то это поле будет неявно входить в primary key, так что условие, согласно которому столбец секционирования должен содержаться в ключе уникального индекса, фактически выполняется.

Но как это синтаксически записать?

(опыта работы в секционированными таблицами нет)
Ответ:
Примуса починяю
Первоначальная идея была в том, чтобы секционировать именно данные :(



Секционируйте, кто вам мешает

делаете секционированный кластерный неуникальный индекс ( тот что у вас есть)
и некластерный невыровненный индекс по id
create clustered index ic_BigLog on BigLog(eventtime) on partition_scheme(eventtime)
create unque index iu_id on BigLog(id) on [primary]
Вопрос: Странности с планом выполнения запроса на секционированной таблице

... точнее с его отображением.

Преамбула:
Имеется Microsoft SQL Server 2014 (SP2-CU1) (KB3178925) - 12.0.5511.0 (X64)
Aug 19 2016 14:32:30
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
Имеется секционированная таблица-хранилище.

При попытке отобразить эстимейтед план запроса к хранилищу, причем запрос полностью укладывается в некий индекс, оптимизатор выдает предупреждение, что "хорошо бы использовать такой-то покрывающий индекс".
Причем индекс именно с такими параметрами на таблице есть. И именно он в плане запроса отображается.

Если добавить к запросу Option (recompile), то отображается точно такой же план (с точно таким же предполагаемым количеством строк и, на первый взгляд, теми же операциями на тех же индексах), но уже без зеленой подсказки "создайте индекс".

Выполняются запросы и вроде бы одинаково.

В чем может быть дело???

На таблице есть множество индексов, но все они выровнены по партициям, и для них указано STATISTICS_INCREMENTAL=ON, в т.ч. для кластерного индекса.
При подгрузке данных в хранилище данные сначала грузятся в таблицу-близнец с той же структурой индексов (но отключенных).
Потом индексы включаются (Alter index All REBUILD), потом делается swap partition, потом уже в целевой таблице на соответствующей партиции делается UPDATE STATISTICS WITH RESAMPLE для каждой инкрементальной статистики (и для индексов, и для созданных вручную статистик по полям).
Автообновление и автосоздание статистик отключено.

Чувствую, засада именно в этом.

Что я мог упустить, не подскажите?
Ответ: uaggster,

Не за что. Я и не думал, что планы одинаковые (у вас они отличаются хотя бы предложением индекса, что говорит о том, что они прошли разный путь оптимизации). Вполне понятно, что планы могут отличаться, есть такая штука как Parameter Embedding Optimization, посмотрите вот :
автор
In SQL Server 2008 RTM we introduced behaviour that allowed potentially better plans to be created when using the OPTION RECOMPILE syntax. The way this worked in principal was that if the OPTION RECOMPILE syntax was used, SQL could assume that the plan for the statement in question would not need to re-used, since it was always going to recompile. Therefore the query optimizer could safely use the actual parameter values passed to the statement when choosing a plan, as opposed to just using a parameterised template. In certain circumstances this can lead to dramatic performance gains, especially when you have parameter values which vary wildly and need different plans dependent upon the values passed.

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

Добрый день, подскажите, пожалуйста, по секционированным таблицам.

1. Есть таблица A
create table A (
  event_time datetime,
  reference_time datetime,
  ....
) on ps(event_time)
, где ps - некая схема секционирования.

2. Исходя из предварительных представлений о том, как будет использоваться таблица, по event_time создан кластерный индекс
create clustered index ic_a on a(event_time) on ps(event_time)
, но уникальность всех event_time при этом не гарантируется.

3. Зато необходимо гарантировать уникальность по reference_time.

Как это грамотно сделать?

С какими неприятностями можно столкнуться, если, допустим, попытаться создать уникальный индекс
create unique index uq_a on a(reference_time) on ps (reference_time)
с секционированием по reference_time?
Ответ: ппп-п, Мимоходящий,

Спасибо, за ответы (дополнил свой вопрос прежде, чем их увидел).
Вопрос: как получить скрипт создания с секционированной таблицы?

mssql 2008 R2

подскажите, как можно получить полный скрипт создания с существующей секционированной таблицы? (и ничего не забыть)
management studio > script table as > create to для нее про партиционирование ничего не показывает
Ответ: В настройках скриптования есть соответствующая опция, которая по дефолту выключена.
Вопрос: Не получается удалить запись из таблицы

Нужно удалить запись из таблицы flowrate, где supply_id равно 2513, и при этом для нее существует запись в таблице writeoff с таким же id (это таблица категорий). Если в ней нет записи для данного id, то не удалять.
DELETE FROM flowrate
INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 2513

Выдает ошибку
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 251' at line 2

При этом на удаление из flowrate стоит триггер before_delete, удаляющий записи с одноименным id из всех таблиц категорий для этой таблицы.
Если пишу вот так:
DELETE flowrate
FROM flowrate
INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 2513

То выдает ошибку:
ERROR 1442 (HY000): Can't update table 'writeoff' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Ответ:
svnvlad
Это то же что и . С тех пор ничего не изменилось даже в версии 8.0.
Вопрос: Перенос данных из GTT в постоянную таблицу

Есть GTT, данные в которой вычисляются при помощи ХП. После заполнения этой таблицы, надо перенести данные в обычную таблицу. Например, GTT состоит из полей NAME и QUANTITY. Обычная таблица состоит из полей ID, ID_DOC, NAME и QUANTITY. То есть надо удалить из второй таблицы все строки с NAME, которых нет в первой, добавить отсутствующие и обновить существующие.
Вопрос форумчанам: при помощи каких конструкций вы решаете подобную задачу? Или решили бы?
Ответ:
CyberMax
Есть GTT, данные в которой вычисляются при помощи ХП. После заполнения этой таблицы, надо перенести данные в обычную таблицу. Например, GTT состоит из полей NAME и QUANTITY. Обычная таблица состоит из полей ID, ID_DOC, NAME и QUANTITY. То есть надо удалить из второй таблицы все строки с NAME, которых нет в первой, добавить отсутствующие и обновить существующие.
Вопрос форумчанам: при помощи каких конструкций вы решаете подобную задачу? Или решили бы?


Из трёх действий (удалить, добавить, обновить) надо оставить только два, т.к. судя по постановке, удалить и обновить логически конфликтуют друг с другом.
Скорее всего тогда останется только два действия:
1. Удаляем из второй таблицы всё, что есть в первой.
2. Вставляем всё из первой таблицы (GTT) во вторую.
Вопрос: Как удалить дубли в таблице с одним столбцом SQlite

Как удалить дублирующиеся строки в таблице с одним столбцом SQlite , есть вот такая таблица.

SQL
1
2
3
CREATE TABLE `card` (
    `card`  TEXT
);
Ответ: самый простой способ - сгруппировать вашим запросом и залить в другую таблицу

способ посложнее - пронумеровать строки и удалить все не минимальные
Вопрос: Удалить запись из таблицы БД SQL Server

Здраствуйте. При вводе данных в sql server ввожу 2 или более одинаковые записи. После чего вылезает такая ошибка: После этого хочу удалить строку с ошибкой и тут вылезает еще одна ошибка: Подскажите как решить эту проблему, как мне теперь удалить эти строки? Поле teID это вторичный ключ. И еще подскажите пожалуйста как в дальнейшем можно избежать добавление одинаковых записей. Как обработать это исключение?
Ответ: Человеку нужно проблему решить, он не знает даже сам принцип. Я принцип знаю, не знаю синтаксис. Мне сидеть молчать, глядя на его страдания и отсуствие ответов, или учить диалект SQL, который мне, вообще говоря, не нужен?

Добавлено через 2 минуты
Вот на прямое обращение ко мне лично

Сообщение от Serjey
texnik-san, Как это сделать? а самое главное, как теперь можно удалить эти записи? Неужели придется удалять таблицу и создавать заново?
Я что должна была сказать - "извини, чувак, я знаю ответ, но не знаю синтаксис, поэтому отвечать тебе ничего не буду"?