Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Вопрос о быстродействии Delete в SQL (число прочтений - 6882 )
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Вопрос о быстродействии Delete в SQL
15. Июня 2006 :: 13:38
Печать  
какой вариант быстрее отработает:
1. "
delete from table where date = 'data1'
delete from table where date = 'data2'
"
или
2. "
delete from table where date >= 'data1'  and date <= 'data2'
"
  
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #1 - 15. Июня 2006 :: 13:43
Печать  
Ну вообще говоря - это разные запросы. В том смысле, что удалят они разное количество записей.
  
Наверх
www  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #2 - 15. Июня 2006 :: 13:46
Печать  
оба варианта в итоге удалят одно и тоже количество записей, но где скорость будет выше? (запрос для таблиц rg)
  
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #3 - 15. Июня 2006 :: 14:05
Печать  
Если Data1 и Data2 - это соседние даты, тогда да, одинаковое количество. но если Data1 - это первое января, а Data2 - 8-е марта, то сам понимаешь.
А по скорости - все зависит от условий. Проверь на своих данных и на своем сервере - и узнаешь самый точный ответ.

В общем случае, делать один запрос должно быть оптимальнее, чем несколько. Но когда сравниваешь один запрос с двумя - этой разницы можно и не заметить.
  
Наверх
www  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #4 - 15. Июня 2006 :: 15:02
Печать  
Запросы действительно разные, вопрос не корректен.
Если поле date проиндексировано, то быстро в обоих случаях.
А вообще, fez сказал все, хауу Улыбка
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #5 - 15. Июня 2006 :: 16:09
Печать  
провел небольшое тестирование:
1. таблица rgxxxx
2. 1336534 записей
3. периодичность месяц
4. перед каждым подходом каждого варианта рестарт sql - сервера
вариант 1:
delete
from rgxxxx
where period
BETWEEN convert(datetime,'20040101',112)
and convert(datetime,'20060101',112)

результат:
первый заход 1мин 11сек
второй заход 1мин 14сек
третий заход 1мин 12сек

вариант 2:

declare @dat datetime
set @dat = convert(datetime,'20040101',112)
while(@dat <= convert(datetime,'20060101',112))
begin
delete from rgxxxx
where period = @dat
set @dat = dateadd(m,1,@dat)
end

результат:
первый заход 1мин 07сек
второй заход 1мин 05сек
  
Наверх
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Вопрос о быстродействии Delete в SQL
Ответ #6 - 15. Июня 2006 :: 16:11
Печать  
spock писал(а) 15. Июня 2006 :: 15:02:
Запросы действительно разные, вопрос не корректен.
Если поле date проиндексировано, то быстро в обоих случаях.
А вообще, fez сказал все, хауу Улыбка


индекс в таблицах rg один по полю period + все измерения
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать