подсчет кол-ва строк

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

подсчет кол-ва строк

Сообщение GByte » 09 фев 2006, 09:17

Есть запрос (не строгий - меняется как параметр функции, не ХП).

Нужно считать, напр. 100 строк (из начала или из середины или из конца - в зависимости от ситуации) и попутно определить общее кол-во строк в результате запроса.

Конечно самый простой способ грубо фетчить все строки, но при большом кол-ве данных это боольшие грабли.

подскажите решение, плииз.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 09 фев 2006, 10:31

Нет решения. Особенно если надо получить строки из произвольного места "в зависимости от ситуации".
Хотя... можно поменять психологию пользователя. Вдолбить ему-таки в голову что "какие-нибудь" данные ему нафиг не нужны как и общее количество выбранных строк.

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 09 фев 2006, 10:45

Я веб-интерфейс к БД делаю... ну и соответственно когда необходимо выводить боольшие таблици хотел сделать разделение на страници, для чего и необходимо кол-во строк+выборка строк из произвольного места...

Dmitry Beloshistov
Сообщения: 41
Зарегистрирован: 27 окт 2004, 11:06

Сообщение Dmitry Beloshistov » 09 фев 2006, 10:51

Что мешает использовать конструкцию:

SELECT FIRST n SKIP m .... ?

Она вообще-то для этого и предназначена...

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 10 фев 2006, 07:03

Ничего не мешает :) только никак найти немог....

Осталось найти элегантное решение подсчета кол-ва записей...

СпасибО!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 10 фев 2006, 08:18

Выбирай все записи сразу, создавай все страницы сразу и потом выдавай пользователю из кэша не обращаясь к БД.

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 10 фев 2006, 09:56

НА создание всех страниц тоже время будет уходить... да и пока пользователю понадобится следующая страница кто-то уже может внести изменения...

Буду искать другой выход.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 фев 2006, 10:14

да и пока пользователю понадобится следующая страница кто-то уже может внести изменения
first/skip это ограничение передачи данных наклиента, а не прерывание выполнения запроса.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 10 фев 2006, 10:24

GByte писал(а):НА создание всех страниц тоже время будет уходить... да и пока пользователю понадобится следующая страница кто-то уже может внести изменения...
Время будет уходить не больше чем на запрос с first-skip, как тебе уже сказали. Зато следующая страница не потребует обращения к базе. Кроме того ты можешь (я надеюсь) выдать первую страницу сразу после формирования (и на ней ссылку просто "на следующую") а кэш набить в фоновом режиме.

Slava Ekimov
Сообщения: 44
Зарегистрирован: 26 окт 2004, 14:30

Сообщение Slava Ekimov » 10 фев 2006, 18:39

kdv писал(а):first/skip это ограничение передачи данных наклиента, а не прерывание выполнения запроса.
Как-то ты двусмысленно написал, как будто из одного запроса можно нестолько раз получить результат.

Ответить