Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как быстро найти запись с заданным порядковым номером / 7 сообщений из 7, страница 1 из 1
27.10.2003, 15:03
    #32306231
Виталя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
Нужно найти запись в табл. с заданным порядковым номером, пишу запрос
select ID
from Tabl Q1
where :RECNO = (select count(*)
from Tabl Q2
where Q2.ID <= Q1.ID)
into :ID;
Но на моей табл. на 2000 записей это зависает секунд на 15. Может есть другие средства, чтобы скорость увеличить ?
...
Рейтинг: 0 / 0
27.10.2003, 15:24
    #32306265
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
В firebird
SELECT FIRST 1 SKIP (:RECNO) ...

В Interbase - не знаю. Смотри синтаксис ROWS
...
Рейтинг: 0 / 0
27.10.2003, 16:09
    #32306337
Малиновский Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
А вот нет в Intebase, FireBird, Yaffil и проч. порядковых номеров! И не было никогда!
Пользуйтесь поиском по ключу. Учите SQL.
...
Рейтинг: 0 / 0
27.10.2003, 17:06
    #32306463
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
select ID
from Tabl Q1
where :RECNO = (select count(*)
from Tabl Q2
where Q2.ID <= Q1.ID)
into :ID;

это что за страх?

ну напиши ХП если уж очень надо. скорость увеличится в сотни раз.
типа такого*пишу на ходу)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create procedure getidbyrownum(rownum integer)
returns (retid integer)
as
declare variable cnt integer;
begin
  cnt= 0 ;
  for select id from tabl into retid do
  begin
     if (cnt=rownum) then
        begin
           suspend;
           exit;
        end
       cnt=cnt+ 1 ;
  end
  exit;
end


если данных много можно сделать проверку типа
Код: plaintext
1.
2.
3.
if ((select count(*)/ 2  from tabl)>rownum) then
  //получать по возрастанию
  else //иначе по убыванию с конца
...
Рейтинг: 0 / 0
28.10.2003, 03:09
    #32306839
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
верно сказано "Учите SQL"...
мне вот интересно как генерируются эти самые "порядковые номера"?
...
Рейтинг: 0 / 0
28.10.2003, 06:27
    #32306859
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
Триггер на инсерт + генератор (учите SQL)
...
Рейтинг: 0 / 0
29.10.2003, 03:14
    #32308200
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро найти запись с заданным порядковым номером
nik_x
я думаю я его маленько знаю.... ну скажем на достаточном уровне, по крайней мере версию IB...

далее, а в курсе ли Вы, молодой человек, о том что если было получено новое значение генератора, то даже в случае отката транзакции генератор не вернется на свое место? А порядковые номера, это в моем понимании последовательность натуральных чисел без пропусков ... Это так на всякий случай... Да и еще, исключительно для Вашего развития, в Oracle не гарантируется что номера будут идти строго последовательно. Гарантируется лишь только что они уникальны. Так что, я позволю себе посоветовать в Ваш адрес не распальцовываться...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как быстро найти запись с заданным порядковым номером / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]