Створення індексу на дійсно зайнятій таблиці


11

У нас є таблиця з багато insert\selectщоразу (як 100 машин, що вставляють \ оновлення щосекунди).

Який найкращий спосіб створити індекс на таблиці, який не можна заблокувати навіть на секунду?

Якщо я створюю індекс, я впевнений, що він заблокує запити, і я не можу це зробити.

Це великий стіл з 1 мільйоном рядків +.

Відповіді:


12

Немає такої опції, як CREATE INDEX WITH (NOLOCK)(і навіть NOLOCKу запиті відбувається блокування, лише менше, ніж без підказки).

Найкраще, що ви збираєтеся зробити, це те WITH (ONLINE = ON), що все-таки знімає блокування на початку та в кінці операції (обидва стосуються перекомпіляції планів, пов’язаних із таблицею - докладнішу інформацію див. У цьому блозі Пола Рандала ).

Це значно зменшить вплив побудови індексу на ваші програми, але практичного способу повністю усунути цей вплив не існує. Також ця функція не безкоштовна: для неї потрібна Enterprise Edition.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.