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

В Interbase - не знаю. Смотри синтаксис ROWS
...
Рейтинг: 0 / 0
Как быстро найти запись с заданным порядковым номером
    #32306337
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот нет в Intebase, FireBird, Yaffil и проч. порядковых номеров! И не было никогда!
Пользуйтесь поиском по ключу. Учите SQL.
...
Рейтинг: 0 / 0
Как быстро найти запись с заданным порядковым номером
    #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
Как быстро найти запись с заданным порядковым номером
    #32306839
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
верно сказано "Учите SQL"...
мне вот интересно как генерируются эти самые "порядковые номера"?
...
Рейтинг: 0 / 0
Как быстро найти запись с заданным порядковым номером
    #32306859
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер на инсерт + генератор (учите SQL)
...
Рейтинг: 0 / 0
Как быстро найти запись с заданным порядковым номером
    #32308200
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_x
я думаю я его маленько знаю.... ну скажем на достаточном уровне, по крайней мере версию IB...

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


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