Обновление таблицы с миллионами записей, ее было 4 дня

В настоящее время я обновляю таблицу с миллионами записей, ее 4 дня и запрос все еще выполняется.

Я проверил монитор активности на своих показах, что запрос выполняется.

В журнале событий ошибок нет.

Производительность:

  • Tempdb на диске A (свободное место на 850 ГБ)
  • файл базы данных на диске B (750 гб свободного места)
  • 16 ГБ оперативной памяти

Пожалуйста, предложите мне, что мне делать?

Запрос

UPDATE
    dbo.table1
SET 
    costPercentage = ISNULL(t2.PaymentIndex, 1.0),
    t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0)
    * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00),
    Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0)
    * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00)
FROM
    dbo.table2 t2
WHERE
    LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default 
12 голосов | спросил Lucky 24 Maypm13 2013, 19:21:30

1 ответ


8

Этот запрос требует, чтобы вы сканировали каждую строку в таблице, потому что

  • Я думаю, что procodet или ProviderCode не индексируются
  • Даже если они были проиндексированы, у вас есть LEFT, который является функцией предиката WHERE
  • И у вас тоже есть COLLATE, который эффективно является функцией предиката WHERE

"функция в предикате WHERE" означает, что индексы не будут использоваться

Если вы его заказываете (скажем, UPDATE TOP (10000) ... AND costPercentage IS NULL), вам нужен индекс на costPercentage и , это предполагает, что вы его устанавливаете.

Единственные решения, которые я вижу, - это

  • заполняет новую таблицу пакетами, на основе, скажем, первичного ключа
  • создайте индексированные, вычисленные столбцы, чтобы скрыть выражения LEFT и COLLATE, затем запустите обновление
ответил gbn 24 Maypm13 2013, 19:49:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132