/ / drop index на ниво дял - sql-server, индексиране

падащ индекс на ниво дял - sql-сървър, индексиране

Знаете ли дали има някакъв начин да направите това в SQL Server (2008)?

Работя в процес на зареждане на DataWarehouse,така че това, което искам да направя, е да изпусна индексите на заредения дял, така че да мога да изпълня бързо групово натоварване и след това да мога да възстановя отново индекса на ниво дял.

Мисля, че в Oracle е възможно да се постигне това, но може би не в SQL Server.

Благодаря, победител

Отговори:

1 за отговор № 1

Не, не можете да пуснете индекси на таблица само за aединичен дял. Въпреки това, SQL 2008 предоставя методология за групово зареждане, която включва инсталиране на втора таблица с точно една и съща схема на отделен дял в същата файлова група, зареждане, индексиране точно по начин, след което „превключване“ на новия дял съществуващ, празен дял на производствената таблица.

Това обаче е много опростено описание. Статията на MSDN за SQL 2008 за изпълнение на това: http://msdn.microsoft.com/en-us/library/ms191160.aspx


0 за отговор № 2

Знам, че не е възможно в SQL 2005. Не съм чувал нищо, което да ви позволи да направите това през 2008 г., но може да е там (прочетох за, но все още не съм го използвал). Най-близкото, което можех да получа, беше деактивирането на индекса, но ако деактивирате клъстерен индекс, вече няма да имате достъп до таблицата. Не толкова полезно, imho.

Моето решение за нашия проект за склад ETL беше дасъздайте таблица, изброяваща всички индекси и ограничения за индексиране (PKs, UQs). По време на ETL, ние минаваме през таблицата (за желания набор от таблици, които се зареждат), премахваме индексите / ограниченията за индексиране, зареждаме данните, след това отново преглеждаме таблицата и пресъздаваме индексите / ограниченията. Вид на грозен и малко неудобен, но веднъж стартиран, той няма да се счупи и има допълнителното предимство на новоизградени индекси (т.е. няма фрагментация, а fillfactor може да бъде 100). , но не толкова трудно.

Можете да го направите динамично - да четете и съхраняватеИндексите / ограниченията на определенията от целевата таблица, ги пуснете, заредете данни, след това динамично изградете и стартирате (пре) създаването на скриптове от съхранените данни. Но ако нещо се срине по време на бягането, ти си толкова мъртъв. (Затова се спрях на постоянни маси.)

Смятам, че това работи много добре с разделяне на таблици, тъй като правите цялата работа върху таблиците "Зареждане", а таблиците на живо (dbo, за нас) са недокоснати.