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

0

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

В моем столе 300 000 строк.

Мой запрос:

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

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

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

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

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

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

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

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

Теги:
oledb
sql-server-ce

1 ответ

4
Лучший ответ

Существует нечто известное как " переломная точка ", где стоимость поиска отдельных строк с помощью поиска не стоит того, и проще просто выполнить одиночное сканирование вместо тысяч запросов.

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

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

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

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

  • 0
    Благодарю. Я рассмотрел твою идею пакетирования, но не хотел трогать код, если бы мне не пришлось. Теперь кажется, что я должен (вздох).
  • 0
    Кроме того, удаление 15000 строк занимает 1-2 секунды. Это звучит разумно?
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню