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, будет значительно меньше, и, следовательно, будет работать быстрее.
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
Это конечно ускоряет выборку бесспорно, но задачу не рашает вцелом. Все равно СПАСИБО.