Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Внизchecksum Найти похожие ветки
← →
Sergey2 (2009-08-13 17:05) [0]Есть таблица в которой 10.000.000 записей. Необходимо выбирать из неё записи по условию фильтрации по полю типа datetime.
declare @currDate datetime
set @currdate = getdate()
declare @priorDate datetime
set @priorDate = (getdate() - 30)
select field1, field2, filldata
from MyTable
where filldata < @currdate and filldata > @priorDate
Возвращается в результате выборки несколько записей. Запрос выполняется секунд 40-50. что очень медленно.
Какие пути решения ? каким образом можно уменьшить время выполнения запроса? почитал про checksum. попробовал.
Получилось примерно следующее.
declare @currDate datetime
set @currdate = getdate()
declare @priorDate datetime
set @priorDate = (getdate() - 30)
select *
from
(select field1, field2, checksum(filldata collate database_default) filldateHash
from MyTable) as mt
where mt.filldateHash < checksum(@currdate) and
mt.filldateHash > checksum(@priorDate)
Запрос то теперь этот быстро выполняется. только вот
where mt.filldateHash < checksum(@currdate) and
mt.filldateHash > checksum(@priorDate)
ну никак не выполняется.
← →
Ega23 © (2009-08-13 17:08) [1]Индекс на это поле наложи.
← →
Павел Калугин © (2009-08-14 00:01) [2]1. вместо
> (getdate() - 30)
dateadd(dd,-30,getdate())
2. что получить то надо? данные за период?
если так то накой черт checksum? смотрел что он возвращает?
а план 1-го запроса смотрел? где тормозит?
совет
> [1] Ega23 © (13.08.09 17:08)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c