SELECT
name, version
FROM
view_name
WHERE
condition
ORDER BY
rank
но данных очень много или запрос сложный.
Могу ли я как-то указать БД и получить гарантии, что
1. результаты будут возвращаться пачками (например, по 10 штук) пока запрос ещё не завершён (допустим он минуты длится)
2. если в первой пачке вернулись rank-и 1,3,10, то в следующей будут уже 10 или больше
3. запрос можно отменить
Интересует в первую очередь про PostgreSQL из-под .net core EF.
Здравствуйте, Jules, Вы писали:
J>Могу ли я как-то указать БД и получить гарантии, что J>1. результаты будут возвращаться пачками (например, по 10 штук) пока запрос ещё не завершён (допустим он минуты длится) J>2. если в первой пачке вернулись rank-и 1,3,10, то в следующей будут уже 10 или больше J>3. запрос можно отменить
курсоры, при условии что есть индекс по rank
А что, на ваших вайтишных курсах даже этого не рассказывают?
Re: Получить ответ от БД пока запрос ещё не окончен
Здравствуйте, Jules, Вы писали:
J>Могу ли я как-то указать БД и получить гарантии, что J>1. результаты будут возвращаться пачками (например, по 10 штук) пока запрос ещё не завершён (допустим он минуты длится) J>2. если в первой пачке вернулись rank-и 1,3,10, то в следующей будут уже 10 или больше J>3. запрос можно отменить
J>Интересует в первую очередь про PostgreSQL из-под .net core EF.
В MS SQL Server есть возможность в тексте запроса указать нужные хинты
SELECT *
FROM [AdventureWorks].[Sales].[SalesOrderDetail] s
INNER JOIN [AdventureWorks].[Production].[Product] p ON p.ProductID = s.ProductID
OPTION ( FAST 1);
В PostgreSQL, насколько я знаю, есть некий модуль pg_hint_plan, делающий что-то похожее, см, например, тут.
Ну и отдельный момент, как это все подружить с EF. Я использую linq2db, и там такая возможность есть.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Получить ответ от БД пока запрос ещё не окончен
Здравствуйте, Jules, Вы писали:
J>Могу ли я как-то указать БД и получить гарантии, что J>1. результаты будут возвращаться пачками (например, по 10 штук) пока запрос ещё не завершён (допустим он минуты длится) J>2. если в первой пачке вернулись rank-и 1,3,10, то в следующей будут уже 10 или больше J>3. запрос можно отменить
J>Интересует в первую очередь про PostgreSQL из-под .net core EF.
У PostgreSQL точно есть bulk fetch, когда запрашиваешь пачку из заданного количества записей. Вернётся или сколько запросил или меньше, если столько записей нет. Повторный fetch вернёт следующую порцию.
Насчёт .NET не знаю, делал через самописную обёртку над библиотекой libpq. Через объявление курсора (DECLARE <имя курсора> CURSOR FOR дальше SELECT), потом уже PQexecParams с указанием запроса "FETCH <количество записей> IN <имя курсора>" с предварительно заготовленными параметрами.
Re: Получить ответ от БД пока запрос ещё не окончен
Здравствуйте, Jules, Вы писали:
J>Интересует в первую очередь про PostgreSQL из-под .net core EF.
База данных отдает строки сразу же как может.
Например если у тебя строки упорядочены при чтении (индекс), то первая строка будет отдана сразу как только будет прочитана.
А если у тебя есть сортировка в плане запроса, то первая строка появится после того как резалтсет будет отсортирован, а это случится после того как все будет прочитано.
Поэтому готовь нормально индексы и строки будут отдаваться сразу, до того как все прочитается.
Re: Получить ответ от БД пока запрос ещё не окончен