powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Число подходящих записей и сами записи в одном запросе
16 сообщений из 16, страница 1 из 1
Число подходящих записей и сами записи в одном запросе
    #34690991
KocT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как выбрать число подходящих под условие WHERE записей и сами эти записи одним запросом? Сейчас я для этого использую два запроса:
Код: plaintext
1.
SELECT count(*) FROM table WHERE ...
SELECT * FROM table WHERE ...
В результате СУБД дважды отрабатывает одно и то же условие поиска, что мне кажется не совсем правильным.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34690997
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Connected to Oracle Database 10g Enterprise Edition Release  10 . 1 . 0 . 2 . 0  
Connected as test

SQL> select
   2     owner,
   3     object_type,
   4     object_name,
   5     last_ddl_time,
   6     count(*) over (order by rownum rows between unbounded preceding and unbounded following) total_number
   7   from dba_objects
   8   where object_name like 'AB%' ;

OWNER      OBJECT_TYPE         OBJECT_NAME     LAST_DDL_TIME       TOTAL_NUMBER
---------- ------------------- --------------- ------------------- ------------
PUBLIC     SYNONYM             ABSPATH          10 . 03 . 2004   01 : 02 : 26              6 
DMSYS      TYPE                ABN_EVIDWT_GRP   10 . 03 . 2004   00 : 41 : 54              6 
DMSYS      TYPE                ABN_EVIDWT_RES   10 . 03 . 2004   00 : 41 : 54              6 
DMSYS      TYPE                ABN_PRED_GRP     10 . 03 . 2004   00 : 41 : 54              6 
DMSYS      TYPE                ABN_PRED_RES     10 . 03 . 2004   00 : 41 : 54              6 
XDB        OPERATOR            ABSPATH          10 . 03 . 2004   00 : 45 : 12              6 

 6  rows selected

Или, например, так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> select
   2     count(*),
   3     owner,
   4     object_type,
   5     object_name,
   6     last_ddl_time
   7   from dba_objects
   8   where object_name like 'AB%'
   9   group by grouping sets ((), (owner, object_type, object_name, last_ddl_time))
  10   order by  1  desc ;

  COUNT(*) OWNER      OBJECT_TYPE         OBJECT_NAME     LAST_DDL_TIME
---------- ---------- ------------------- --------------- -------------------
          6                                                 
          1  XDB        OPERATOR            ABSPATH          10 . 03 . 2004   00 : 45 : 12 
          1  DMSYS      TYPE                ABN_PRED_GRP     10 . 03 . 2004   00 : 41 : 54 
          1  DMSYS      TYPE                ABN_PRED_RES     10 . 03 . 2004   00 : 41 : 54 
          1  DMSYS      TYPE                ABN_EVIDWT_GRP   10 . 03 . 2004   00 : 41 : 54 
          1  DMSYS      TYPE                ABN_EVIDWT_RES   10 . 03 . 2004   00 : 41 : 54 
          1  PUBLIC     SYNONYM             ABSPATH          10 . 03 . 2004   01 : 02 : 26 

 7  rows selected
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34691032
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>
>...Или, например, так:...

Уважаемый softwarer !
Если не затруднит, не могли бы Вы дать оценку эффективности и скорости построения выборки для следующего варианта по сравнению с одним SELECT: Вызывается хранимая процедура и первый Select строит представление выборки из двух столбцов - номер строки и суррогатный ключ, второй SELECT восстанавливает полную выборку (все поля).

С уважением, Владимир.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34691108
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЕсли не затруднит, не могли бы Вы дать оценку эффективности и скорости построения выборки для следующего варианта по сравнению с одним SELECT
Существенно зависит от деталей запроса и реализации. Можно построить пример, в котором оверхед будет практически незаметен, и можно построить пример, в котором будет разница раза в три. "В среднем" я бы ожидал результат ближе ко второму случаю - в основном потому, что в запросе как правило участвует несколько таблиц, и при таком подходе их придется join-ить дважды.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34691287
KocT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А варианты для MySQL есть? Еще раз поясню задачу: мне нужно знать общее число подходящих под условие записей, и содержимое самих записей в некотором интервале (скажем, записи с десятой по двадцатую - я постранично вывожу результаты запроса). Вариант GROUP BY ... WITH ROLLUP в силу ряда причин не подходит (проблемы с ORDER BY и LIMIT).
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34692584
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer
>Существенно зависит от деталей запроса и реализации.

У меня в строке базовой таблице много полей содержат значения внешних ключей справочников.
SELECT содержат условие 'Like' и сортировку по полю(ам). Думал, что основную работу выполняет первый SELECT. Задача в общем таже, что и у КосТ. Заливаю во временную таблицу номер записи выборки и ключ. Обидно, что такой разброс по производительности.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34692921
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KocT пишет:

> Как выбрать число подходящих под условие WHERE записей и сами эти записи
> одним запросом? Сейчас я для этого использую два запроса:
>

А не надо это писать.
Выбери сами подходящие под условие WHERE записи и
на клиенте посчитаешь их количество.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34695509
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевДумал, что основную работу выполняет первый SELECT.
Это зависит от ситуации. В такой схеме я бы выделил три задачи: первый селект, работу с временной таблицей, второй селект. Как распределятся усилия между ними - большой вопрос. Скажем, если в результат запроса должно попасть 20% записей базовой таблицы, сервер скорее всего использует full scan и скорее всего не закеширует таблицу целиком после первого селекта. А значит, второй селект будет повторно читать с диска те же данные.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34696644
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer
>... не закеширует таблицу целиком после первого селекта. ...

Правильно ли я понимаю - первый SELECT (SELECT ... INTO TABLE) в хранимой процедуре может и не построить временную таблицу ?

С уважением, Владимир.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34696661
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Временную таблицу он построит (и, отметим, не обязательно в оперативке). Но затем Вы захотите, опираясь на ось временной таблицы, запросить из базовой "остальные поля" - и вот тут вполне может пойти новое чтение с диска.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34696771
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый softwarer!

Просветите меня вот в каком вопросе - временная таблица по полной выборке построена (первый SELECT). Из временной таблицы "вырезаю" страницу. Далее строю полную таблицу значений страницы и передаю сиё клиенту. Возможно, что вся базовая таблица будет просканирована, или строки будут "надергиваться" исходя из страницы временной таблицы?

С уважением, Владимир.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34696853
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевВозможно, что вся базовая таблица будет просканирована, или строки будут "надергиваться" исходя из страницы временной таблицы?
Возможно, но маловероятно. Оверхед в этом случае пооптимистичнее, хотя вовсе не факт, что будет незаметен; впрочем, говорить о нем глупо просто потому, что схема некорректна с точки зрения данных.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34697064
KocT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем я нашел как это сделать под мускулем:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE ... LIMIT ...;
mysql> SELECT FOUND_ROWS();
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34705830
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>softwarer
>Возможно, но маловероятно.

Уважаемый softwarer!
Я небольшой специалист по базам (серверам) данных.
Меня интересует минимизация трафика глобальной сети. Сжимаю конечно. Но лишнего передавать не хочется. Передаю клиенту станицу - тестирую 240 строк. У меня датчики (типа температура, давление, расход) имеют 3 идентификатора - индекс датчика (проект, без бутылки не разберешься), название короткое (<=24 символов), для специалистов (по проекту, здесь корпуса, цеха и т.п. идентифицируются короткими последовательностями символов -2,3) и длинный <=150 символов - это для людей. Если хочу посмотреть номенклатуру датчиков по расходу пара в цехе X, то хочу передать выборку из базовой таблицы датчиков с полями внешних ключей по цеху и датчику и выборку из таблицы справочника (справочников, есть та и другая версия) по разрешению внешних ключей. В MS SQL две выборки строю одним обращением к внешней процедуре. Передаю сиё клиенту в локальный DataSet и только здесь заменяю внешние ключи на соответствующие значения из локальной таблицы выборки из справочника.
Извините за корявый стиль - время поджимает.

С уважением, Владимир.
p.s. Занимаюсь шлифовкой прототипа. Теперь запрос обрабатывается не 2 сек, а менее 1 сек.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34707051
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, признаться, не очень понял, что Вы от меня хотите.

Относительно частая практика - кеширование справочников. То есть, если по траффику не хочется гнать одни и те же строки, справочник передается один раз, а дальше подставляется на клиенте. Понятно, при этом надо думать о корректном обновлении кэша в случае изменения справочника.

Если Вы хотите каждый раз передавать выборку и справочник, экономя лишь на многократном вхождении строки в результат..... не знаю, мне так представляется, сжатие должно справиться с этим не хуже с точки зрения траффика и лучше с точки зрения универсальности-удобства-экстравагантных вариантов.
...
Рейтинг: 0 / 0
Число подходящих записей и сами записи в одном запросе
    #34707522
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый softwarer !

Спасибо за ответы.
Я на самом деле передаю за один запрос страницу выборки и фрагмент справочника, соответствующего данной страницы. Не знаю, будет ли запрос на следующую страницу. Хочу сэкономить трафик на многократном вхождении строки в результат.

С уважением, Владимир.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Число подходящих записей и сами записи в одном запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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