Тормозит !!!!!

Olegg
Дата: 18.12.2002 19:15:41
Делаю VIEW из 10 таблиц , получаю результат 43 поля,далее работаю с VIEW при помощи хранимой проседуры :

CREATE PROCEDURE MainProcedure
@number_1 int=0,
@number_2 int=10
AS
DROP TABLE tmp
SELECT identity(int, 1,1) AS RowNum,idt AS idt, FAMILY AS FIO INTO tmp FROM VIEWstaff ORDER BY RowNum
SELECT b. *FROM tmp AS a
INNER JOIN viewstaff AS b on a.IDT = b.IDT
WHERE a.RowNum BETWEEN @number_1 AND @number_2
GO
Выбираю количество записей из этого VIEW сортированного по фамилии.
Все долго работает.
Где тормоз ??? подскажите....
Breakneck
Дата: 18.12.2002 19:29:12
Попробуйте наложите условие, указанное в where, как условие для inner join. Тогда набор записей, участвующих в join, будет значительно меньше, и, следовательно, будет работать быстрее.
SandalTree
Дата: 18.12.2002 22:02:30
Однозначно будет быстрее:
SELECT top @number_1 * 

FROM (
SELECT top 100 percent *
FROM(
SELECT top @number_2 *
FROM viewstaff
) as a
ORDER BY FAMILY
) as a
ORDER BY FAMILY desc

если конечно @number_2 <<<< чем
SELECT count(*) FROM viewstaff
Olegg
Дата: 19.12.2002 13:21:18
Дело в том , что задача состоит в выборе из viewstaff пачки записей по 100 скажем , например с 1-100 ,с 100-200 и.т.д. Они должны отсортироваться по family и получить в этой сортировки RowNum . Далее я уже вибираю по 100 вверх или вниз по RowNum и показываю у клиента.....Если в гриде у клиента на 100 записи фамилия Сидоров то при переходе дальше эта фамилия встает первой и остальные 100 по алфавиту.... Как быстро это делать.
SELECT top @number_1 *
FROM (
SELECT top 100 percent *
FROM(
SELECT top @number_2 *
FROM viewstaff
) as a
ORDER BY FAMILY
) as a
ORDER BY FAMILY desc
Это конечно ускоряет выборку бесспорно, но задачу не рашает вцелом. Все равно СПАСИБО.
SandalTree
Дата: 19.12.2002 22:23:01
А что тебе мешает сделать так?
SELECT identity(int, 1,1) AS RowNum, * 

INTO #tmp
FROM VIEWstaff
ORDER BY FAMILY

SELECT *
FROM #tmp
WHERE RowNum BETWEEN @number_1 AND @number_2