Производительность удаления SQL Server CE

Я использую SQL Server CE 4.0 и мне плохо DELETE выполнение запросов.

В моей таблице 300 000 строк.

Мой запрос:

DELETE from tableX
where columnName1 = '<some text>' AND columnName2 = '<some other text>'

Я использую некластеризованный индекс в 2 полях columnName1 и columnName2.

Я заметил, что когда количество строк для удаления мало (скажем, < 2000), индекс может помочь производительности в 2-3 раза. Однако, когда количество удаляемых строк больше (скажем,> 15000), индекс совсем не помогает.

Моя теория такого поведения заключается в том, что когда число строк велико, обслуживание индекса сводит на нет выгоды, достигнутые с помощью индекса (поиск по индексу вместо сканирования по таблице). Это правильно?

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

Кроме того, что еще я могу сделать, чтобы улучшить производительность удаления для случая> 15 000 строк?

Я использую SQL Server CE 4.0 в Windows 7 (32-разрядная версия).

Мое приложение написано на C ++ и использует интерфейс OLE DB для управления базой данных.

0

Решение

Есть нечто, известное какпереломный момент«там, где стоимость поиска отдельных строк с использованием поиска не стоит, и проще просто выполнить одно сканирование, а не тысячи поисков.

Несколько вещей, которые вы можете рассмотреть для производительности:

  • иметь отфильтрованный индекс, если они поддерживаются в CE (я, честно говоря, понятия не имею)

  • вместо того, чтобы удалять 15 000 строк одновременно, пакетное удаление в куски.

  • рассмотреть «мягкое удаление» — где вы просто обновите active столбец до 0. Затем вы можете удалить строки небольшими партиями в фоновом режиме. Я имею в виду, действительно ли пользователь сидит и ждет, когда вы удалите более 15 000 строк? Зачем?

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]