|
Методы выборки из середины таблицы
|
|||
---|---|---|---|
#18+
Господа Ораклисты/Оракулисты Такой вопрос: какие сужествуют методы выборки из таблицы какогото количества записей, находящихся в середине. Допустим существуе таблица на 200 тысяч записей типа следующей: ID STRING1 NUMBER1 NUMBER2 LSUPDATE ------- -------------------- --------- --------- ---------- 1 aaa 10 20 01-06-2001 2 bbb 1 3 01-06-2001 18 ccc 5 91 10-10-2000 149 ddd 10 100 01-06-2001 200 eee 5 6 10-10-2000 400 fff 90 400 10-10-2000 500 ggg 4 67 10-10-1980 Всего 200.000 роус селектед После определнного селекта (Q1) получает из нее допустим 5 тысяч. Вот этот селект: select id,string1, FSSTATISTICS_TORL_HITSHOSTS(number1,lsupdate) AS number_1, FSSTATISTICS_TORL_HITSHOSTS(number2,lsupdate) AS number_2, number2,TO_CHAR(lsupdate,'dd-mm-yyyy') as lsupdate from table_x1 order by number_1 DESC, string1 ASC ; ID STRING1 NUMBER_1 NUMBER_2 NUMBER2 LSUPDATE ------ -------------------- --------- --------- --------- ---------- 1 aaa 10 20 20 01-06-2001 149 ddd 10 100 100 01-06-2001 2 bbb 1 3 3 01-06-2001 18 ccc 0 0 91 10-10-2000 200 eee 0 0 6 10-10-2000 400 fff 0 0 400 10-10-2000 500 ggg 0 0 67 10-10-1980 Всего 5.000 роус селектед Обратите внимание, что после запроса уникальные праймари кии сортируюся хаотично, а в параметр по корому сортируем содержит не уникальные, повтряющиеся значения. Пеперь нужно просматривать все эти записи допустим по 50. И как же мне преобразовать запрос Q1 чтобы этот запрос розвратил мне например запись с 50 по 100. То есть это: ID STRING1 NUMBER_1 NUMBER_2 NUMBER2 LSUPDATE ------ -------------------- --------- --------- --------- ---------- 149 ddd 10 100 100 01-06-2001 2 bbb 1 3 3 01-06-2001 18 ccc 0 0 91 10-10-2000 Всего 50 роус селектед. Если бы я сортировал по ID я бы спокойно обошелся псевдоколумом ROWNUM и выбирал бы любые N значений из любого места. Однако здесь ситуация другая. Так как же решается моя проблема, или же она не решаема только с помощью передачи данных из первого запроса в другую таблицу и далее селектить из нее сколько нужно с нужного места. Да только проблема что много, записей могут не уместиться в РОЛЛБЭК СЕГМЕНТ, а если и уместяться, то копирование такое будет сравнительно небыстрым. ?????????????????? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2001, 17:02 |
|
Методы выборки из середины таблицы
|
|||
---|---|---|---|
#18+
можно попробывать использовать хранимую процедуру, которая будет явно обрабатывть курсор и возвращать нужный набор записей. Хотя само понятие середины или начала таблицы звучит как то странно... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2001, 11:34 |
|
Методы выборки из середины таблицы
|
|||
---|---|---|---|
#18+
Конечно, понятие середина таблицы не имеет право быть, потомучто это чушь полная. Однако другого слова я не нашел. Хотел сказать: представление таблицы после запроса, но после этого сразу бы возникли ассоцииации с VIEW, что знающих и мудрых ввело бы в большее заблуждение. В общем мне требуется сделать выборку из данных полученных после запроса, но не с помощью какого-то скрипта, а чтобы эту работу взяла на себя СУБД. Вот например есть у меня таблица на 100.000 записей. Пишу я в SQL+: SELECT * from MY_BIG_TABLE. SQL плюс показывает мне их определенными порциями (в зависимости от параметра arraysize чтоли), причем явно не перебрасывает все записи по сети сразу, а постепенно подкачивает их с сервера. То есть выходит, либо СУБД кидает все 100.000 записей в буфер и отттуда выводит по N-цать (выделяя при этом память на 100.000 строк!!!), либо делает чтото вроде того SELECT * from MY_BIG_TABLE start_with 100 end_with 100+arraysize - то есть постоянно читает данные из таблиц руководствуясь пользовательским запросом. Ну в общем вам виднее господа. Я всего лишь только учусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2001, 18:10 |
|
Методы выборки из середины таблицы
|
|||
---|---|---|---|
#18+
Действительно, я хотел бы использовать выборку данных из огромной таблицы. Какие есть приемы? Пробовал через rownum - не получилось! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 08:02 |
|
|
start [/forum/topic.php?fid=52&msg=32006904&tid=1993566]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 424ms |
0 / 0 |