Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Добрый день! У меня такой вопрос: есть таблица с полями id_name name -------- ------- 1 Вася 2 Лена 6 Костя 8 Василиса 9 Володя 10 Света 12 Денис 13 Тоня 14 Костя всего 9 записей Как в DB2 составить запрос на выборку, например, с 3-ей по 7-ую записи? В mysql аналог limit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:00 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Если говорить о том, что с третьей - то, такое не предусмотрено. А ограничить выборку N записей: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:06 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
tomassoДобрый день! У меня такой вопрос: есть таблица с полями id_name name -------- ------- 1 Вася 2 Лена 6 Костя 8 Василиса 9 Володя 10 Света 12 Денис 13 Тоня 14 Костя всего 9 записей Как в DB2 составить запрос на выборку, например, с 3-ей по 7-ую записи? В mysql аналог limit Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:09 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо!!! Выручили! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:18 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenmanЕсли говорить о том, что с третьей - то, такое не предусмотрено. Предусмотрено, еще как предусмотренно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 15:20 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Herr Developer gardenmanЕсли говорить о том, что с третьей - то, такое не предусмотрено. Предусмотрено, еще как предусмотренно... Нука-нука... )) Покажи...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 15:40 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenman Herr Developer gardenmanЕсли говорить о том, что с третьей - то, такое не предусмотрено. Предусмотрено, еще как предусмотренно... Нука-нука... )) Покажи...)) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 16:05 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
А тем, что сначала полною выборку построит, потом- пронумерует, профильтрует и тока тотом ответ даст. Во как!... Решение, но не производительное. Фигня короче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 16:33 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenmanА тем, что сначала полною выборку построит, потом- пронумерует, профильтрует и тока тотом ответ даст. Во как!... Решение, но не производительное. Фигня короче. Так работает же "фигня такая" Тем более "тут" мигрируют с MySQL Самой простой способ сделать ограниченный и кустамизированный по сорту листинг! И уж на много "дешевле", чем вытаскавать все на клиента и там "колбасить" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 17:00 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Ну, если уж на то пошло, то есть замечательная функция keep, которая позволяет пронумеровать записи без привлечения аналитических функций: дивися: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 18:07 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenmanНу, если уж на то пошло, то есть замечательная функция keep, которая позволяет пронумеровать записи без привлечения аналитических функций: А где эта замечательная функция KEEP есть то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 18:33 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenmanА тем, что сначала полною выборку построит, потом- пронумерует, профильтрует и тока тотом ответ даст. Во как!... Решение, но не производительное. Фигня короче.Хех, а как ты хотел, однако??? Вот предположим, есть у тебя выборка. Пусть в ней будет 1000000 строк. Пусть ты хочешь показать строки с 999990 по 1000000 (это очень стандартная ситуация, к примеру, постраничный просморт данных на веб-сайте). Тут ты хоть матушку-репку пой, но тебе-таки придется выдернуть все 1000000 записей, чтобы добраться до 10 последних. Как вариант, можно скомбинировать fetch first N rows only с аналитической функцией. Кроме того, если сортировка не нужна, то можно аналитическую функцию указать без кляузы ORDER BY (то есть написать row_number() over() ). Всё это позволит немного улучшить картину, но только в тех случаях, когда мы будем выбирать небольшое число строк от начала результирующего датасета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 05:22 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
2Владимир Конев ...row_number() over(order by id_name) Наличие индекса по id_name тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 05:39 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
golsa2Владимир Конев ...row_number() over(order by id_name) Наличие индекса по id_name тожеЕсли честно, то я не понял, что ты ЭТИМ хотел сказать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 08:33 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Herr Developer gardenmanНу, если уж на то пошло, то есть замечательная функция keep, которая позволяет пронумеровать записи без привлечения аналитических функций: А где эта замечательная функция KEEP есть то? Эта волшебная функция есть у меня Позволяет сохранить значение поля для выражений в следующей строке. Т.е. позволяет очень очень быстро выполнять некоторые аналитические функции без всяких сортировок (типа расчета остатков нарастающим итогом) Особенно если идет по индексу - вообще веселуха. Я б даже для IBM сделал suggestion чтоб они эту фичу в стандартную возможность DB2 записали. кстати на эту идею меня TORT натолкнул еще год назад. Может исходники выложить? Они ооочень короткие и оооочень простые. Хочешь? автор Хех, а как ты хотел, однако??? Однако не надо мне объяснять прописные истины. Я лишь хочу подчеркнуть тот факт, что все в итоге зависит от проектирования. И такие запросы как - дать 10 записей из выборки начиная с 100-й - яркий пример как впустую транжирить ресурсы сервера. Я в своей базе никогда не допущу подобного. В противовес - дать 10 записей начиная со значения ключа - совсем другое дело. Тут накладные расходы сервера - минимальны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:08 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Как вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:20 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
2 Alexey Popov Прикольно. )) Сначала прошагать нужное количество записей, а потом выбрать столько сколько нужно. Только >3 надо параметризовать. А так действительно - все верно. Вариант почти рабочий. Но опять же - накладных расходов много будет если "пропустить записей нужно будет много. Дело в том, что запрос Q1 пойдет по индексу - это еще не факт. Так что нужно подправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:37 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
2 gardenman Понимаю, что будет фетч всех записей от первой до стартовой (третьей) ради её нахождения. И будет странно, если не по индексу. Отличие от варианта с ROW_NUMBER в том, что предикаты по ключевому полю должны сработать быстрее. IMHO. Если это простой листинг данных порциями, то разумнее запоминать последний ID_NAME с последуйщим запросом новой порции данных. Как в твоём первом ответе. Но в вопросе это не видно (мне). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 12:07 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
gardenman Я б даже для IBM сделал suggestion чтоб они эту фичу в стандартную возможность DB2 записали. кстати на эту идею меня TORT натолкнул еще год назад. Начнеться public beta Viper'a тогда надо делать suggestion IBMу gardenman Может исходники выложить? Они ооочень короткие и оооочень простые. Хочешь? Сейчас думаю, где бы это могло пригодиться... Во, например, можно легко график баланса сделать, как денюжки клиентов притикали/отнекали во времени Выкладывай сюда! Или лучше сделать ветку типа "KEEP - bla-bla-bla function" Чтоб, если что, народ мог свои wishes писать и благодарности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 12:48 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Вот задался вопросом - надо сделать пэйджинг таблицы. Всё бы хорошо, да id не инкрементируется, т.е. не 1,2,3... 99,100, а рандомные. Записей много - миллион, т.е. считывать весь миллион записей и выдавать, скажем, 100, пользователю - не рационально. Как здесь быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2008, 19:17 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
olegrolikВот задался вопросом - надо сделать пэйджинг таблицы. Всё бы хорошо, да id не инкрементируется, т.е. не 1,2,3... 99,100, а рандомные. Записей много - миллион, т.е. считывать весь миллион записей и выдавать, скажем, 100, пользователю - не рационально. Как здесь быть?Как часто записи в таблице удаляются или вставляются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2008, 10:03 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, спасибо за ответ. Нашёл вариант вот такой: SELECT * FROM ( SELECT id, name, rownumber() OVER () AS ROW_NEXT FROM hockey ) as product_temp WHERE ROW_NEXT BETWEEN 0 and 100 У меня будет веб-приложение (страничка-jsp) а там легко сохранять 0 и 100, потом изменять эти значения на 101 и 200, и так далее... Хотелось бы услышать ваш вариант. Записи будут добавляться постоянно. Это тестовое приложение для изменения записей в таблице, но возможно практическое применение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2008, 11:17 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
olegrolikMark Barinstein, спасибо за ответ. Нашёл вариант вот такой: SELECT * FROM ( SELECT id, name, rownumber() OVER() AS ROW_NEXT FROM hockey ) as product_temp WHERE ROW_NEXT BETWEEN 0 and 100 У меня будет веб-приложение (страничка-jsp) а там легко сохранять 0 и 100, потом изменять эти значения на 101 и 200, и так далее... Хотелось бы услышать ваш вариант. Записи будут добавляться постоянно. Это тестовое приложение для изменения записей в таблице, но возможно практическое применение.На миллионе записей у вас будет очень плохая производительность. Если вам действительно нужно пейджить такое огромное кол-во записей, то здесь я вижу 2 варианта: 1. Держать отдельную таблицу, в которой при каждой вставке/удалении надо будет перенумеровывать строки без пропусков 2. Открывать scrollable курсор и фетчить записи по абсолютному/относительному смещению по нужному кол-ву записей 1-й не подхоит из-за частых изменений 2-й может не подойти, если вы не сможете сохранять для пользователя его ResultSet между вызовами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2008, 13:39 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
1. Держать отдельную таблицу, в которой при каждой вставке/удалении надо будет перенумеровывать строки без пропусков 2. Открывать scrollable курсор и фетчить записи по абсолютному/относительному смещению по нужному кол-ву записей 1-й не подхоит из-за частых изменений 2-й может не подойти, если вы не сможете сохранять для пользователя его ResultSet между вызовами 1. Не пойму для чего нужна отдельная таблица? Можно немного поподробнее? 2. Я в программировании БД не силён, думаю надо почитать литературу. А всё же если просто делать пэйджинг без редактирования записей (для начала так - просмотр данных и всё), мой вариант годится? Т.е. на форме будет две кнопки - предыдущие 100 записей , следующие 100 записей . И при нажатии на каждую кнопку, будет вызываться select (см. выше какой) и данные будут отображаться на jsp-страничке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2008, 15:16 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
olegrolik1. Не пойму для чего нужна отдельная таблица? Можно немного поподробнее? 2. Я в программировании БД не силён, думаю надо почитать литературу. А всё же если просто делать пэйджинг без редактирования записей (для начала так - просмотр данных и всё), мой вариант годится? Т.е. на форме будет две кнопки - предыдущие 100 записей , следующие 100 записей . И при нажатии на каждую кнопку, будет вызываться select (см. выше какой) и данные будут отображаться на jsp-страничке.При каждом вызове вашего запроса будут происходить следующие вещи: 1. Сканирование миллиона записей 2. Выборка 100 записей 1-й шаг - весьма затратное действие, особенно, когда много пользователей. Ваша задача - либо уменьшить число шагов 1, либо избавиться от них вообще. Извавиться от шагов 1 можно либо введя доп. таблицу "перекодировки", либо ввести доп. поле в этой таблице. Тогда запрос для доп. таблицы hockey_ext: Код: plaintext 1. 2. 3. 4. 5. select h.* from hockey h join hockey_ext e on h.id=e.id where e.id_ordered between v1 and v1+100; Уменьшить число шагов 1 можно, открыв курсор с большим числом записей 1 раз, а потом на запросы получения след. порции просто прокручивать этот курсор, не заставляя сервер каждый раз при этом выполнять дорогостоящее сканирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 16:03 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
Т.е. говоря проще, добавить в таблицу новое поле order_id, где значения будут инкрементами (от 1 до миллиона). И делать выборку по этому полю. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 18:10 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
В CookBook для 9.5 есть такой пример. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. если вместо (SELECT MIN(inv#) FROM invoice) подставить нужное значение то можно будет гулять по все таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 09:44 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
так же там есть примеры использования функции Lag и Lead которые показывают значение предыдущей и следующей записи. Проверить у себя не могу но думаю что то типа Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 09:55 |
|
||
|
запрос на выборку данных
|
|||
|---|---|---|---|
|
#18+
olegrolikТ.е. говоря проще, добавить в таблицу новое поле order_id, где значения будут инкрементами (от 1 до миллиона). И делать выборку по этому полю. Верно?Это будет работать только если у вас: - не будет удалений записей - операции вставки никогда не будут отваливаться по ошибке - инкрементное поле будет no cache или при рестарте базы вы будете руками рестартовать инкремент с существующего макс. значения+1 Иначе у вас будут появляться дыры в нумерации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 10:07 |
|
||
|
|

start [/forum/topic.php?all=1&fid=43&tid=1603645]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 257ms |
| total: | 468ms |

| 0 / 0 |
