Ускорение удаляет, которые имеют объединения - PullRequest
1 голос
/ 03 февраля 2012

я запускаю хранимую процедуру для удаления данных из двух таблиц:

delete from TESTING_testresults
from TESTING_testresults
inner join TESTING_QuickLabDump
on TESTING_QuickLabDump.quicklabdumpid = TESTING_TestResults.quicklabdumpid
where TESTING_quicklabdump.[Specimen ID]=@specimen



delete from TESTING_QuickLabDump
from TESTING_Quicklabdump
where [specimen id]=@specimen

одна таблица составляет 60 м строк, а другая - около 2 м строк

процедура занимает около 3 секунд дозапустить.

Есть ли способ ускорить это?возможно, используя EXISTS?

, что означает IF EXISTS...THEN DELETE - потому что удаление не должно происходить каждый раз

примерно так

если @specimen exists в TESTING_QuickLabDumpзатем выполните процедуру с двумя удаляется

спасибо !!!

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Переписывание запроса, вероятно, не поможет ускорить это. Используйте profiler , чтобы узнать, какие части запроса медленны. Для этого сделайте так, чтобы профилировщик вывел план выполнения . Затем попробуйте добавить соответствующие индексы. Возможно, одна или обе таблицы могут использовать индекс более [specimen id].

1 голос
/ 04 февраля 2012

Помимо индексации «очевидных» полей, посмотрите также схему вашей базы данных и проверьте, есть ли у вас какие-либо ИНОСТРАННЫЕ КЛЮЧИ, чьи ON DELETE CASCADE или SET NULL могут быть вызваны вашим удалением (в отличие от Oracle, MS SQL Server будет стремиться показать ихплан выполнения).К счастью, это обычно довольно легко исправить путем индексации дочерней конечной точки FOREIGN KEY.

Также проверьте, есть ли у вас дорогие триггеры.

1 голос
/ 04 февраля 2012

Для таблицы с 60 миллионами строк я бы определенно разбил данные по горизонтали и / или вертикали.Если это чувствительные ко времени данные, то вы должны иметь возможность перемещать старые данные в таблицу истории.Обычно это первая и самая очевидная вещь, которую люди делают, поэтому я думаю, что если бы это было возможно, вы бы это уже сделали.

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

Если вы «действительно» хотите точно настроить скорость, то вам следует подумать о том, как получить более быстрый жесткий диск, и немного узнать о работе с жесткими дисками.Хранение данных к внутренней или внешней части жесткого диска, например, немного повлияет на скорость доступа.И твердотельные жесткие диски прошли долгий путь, так что вы можете попробовать один из них.

...