Sql как разбить запрос на части
Перейти к содержимому

Sql как разбить запрос на части

  • автор:

Как разбить / запустить большой запрос SQL?

200 миллионов), и я хочу обработать эти значения в С# после их чтения из памяти. Обработка требует группировки записей по значениям столбцов способом, который не может быть выполнен внутри самого SQL-сервера. Проблема в том, что чтение всех данных сразу дает мне исключение OutOfMemory и занимает много времени, чтобы выполнить даже частично.

Итак, я хочу разбить мой запрос на более короткие фрагменты. Один из методов состоит в том, чтобы, очевидно, сделать независимый выбор, а затем использовать предложение where in. Другим методом, который я предложил, является использование курсоров sql. Я хочу выбрать один из этих методов (или, если возможно, другой), особенно в отношении следующих пунктов:

  • Каким будет влияние схем на сервере? Что будет работать быстрее?
  • Можно ли безопасно распараллелить запросы курсора sql? Получаю ли я выгоду от производительности, если я буду распараллелить первую схему (одна с которой в разделе)?
  • Сколько объектов можно указать в разделе where in? Ограничен ли он только размером строки запроса?

Любые другие предложения также приветствуются.

Edit1: Мне дали разные решения, но мне все же хотелось бы знать ответы на мои исходные вопросы (из любопытства).

Разбить сложный запрос на несколько простых

Разбить столбец на два по параметру, сложный запрос
Имеется таблица ФИО Направление Время Иванов И.И. Вход 7:56.

1 сложный запрос или несколько простых?
Есть 3 таблицы: users (id, type, online), colors(id,name), user_colors(user_id, color_id) .

необходимо придумать НУ ОЧЕНЬ сложный запрос (или несколько запросов)
Необходимо написать такую обновлялку для таблицы, которая обновляла бы два поля (1 и 2) 🙂 . Но.

сложный запрос (для меня сложный)
Есть таблица с продажами услуг от разных фирм, есть таблица с оплатой за предоставленные услуги.

Сообщение от FutureCome

Как теперь переделать этот запрос, чтобы он выполнял задачу в полном объёме?

Мне необходимо 2 запроса (для отображения двух связанных таблиц в программе). В одном из них — только отобранные залы, а во втором — только им соответствующие отели;

В запросе с залами должно быть:
1. Залы, у отелей которых cnt >= @КоличествоЗалов
2. Для каждого отеля должно быть отобрано @КоличествоЗалов по упорядоченному rnk;

В запросе с отелями должно быть:
1. Поле cnt (именно в отелях, а не в залах);
2. Все отели, у которых cnt >= @КоличествоЗалов;
3. Сколько залов из отобранных в первом запросе удовлетворяют rnk >= @rnkMin;
4. Процент таких залов от отобранных;
5. Если этот процент меньше @ПроцентПодходящихЗалов — отбросить такой отель и его залы (т.е. запрос 1 и 2 связаны).

Как обойтись теперь без кучи временных таблиц и табличных переменных?

Добавлено через 19 часов 13 минут
Как использовать alias сложного выражения в where?

Как разбить SQL запрос на два?

Неуверен что тебе это ускорит, полагаю даже что атормозит, бд для того и нужны чтобы обрабатывать здоровые массивы данных, если хочешь разбить и юзать результаты запроса, попробуй Кашировать запрос..

Неуверен что все получится как я говрю, но теория такова(на практики я сам это не использовал)
Для того чтобы первый запрос не изменил саму базу данных, а результат получился как бы в памяти юзаем кэширование Query1->CachedUpdates=true;
Да и еще помести с Data Access компонент UpdateSQL чтобы после выполнения селекта
подсоедини к компоненту Query (получившаяся татаблица ака результат годен не только для чтения но и для модификации). ., делаешь нужный запрос и в консе сохраняешь хеш ApplyUpdate вроде так, а вообще почитай где нибудь про это..

Как разбить один большой запрос в базу sql на несколько маленьких

$query = «SELECT torrents.id, torrents.moderated, torrents.moderatedby, torrents.category, (torrents.leechers+torrents.f_leechers) AS leechers, (torrents.seeders+torrents.f_seeders) AS seeders, torrents.free, torrents.name, torrents.times_completed, torrents.size, torrents.added, torrents.comments, torrents.numfiles, torrents.filename, torrents.seeders_parse, torrents.leechers_parse, torrents.times_completed_parse, torrents.sticky, torrents.owner,» .
«IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, users.username, users.class».($CURUSER ? «, EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = «.sqlesc($CURUSER[«id»]).» AND readtorrents.torrentid = torrents.id) AS readtorrent» : «, 1 AS readtorrent»).» FROM torrents LEFT JOIN categories ON category = categories.id LEFT JOIN users ON torrents.owner = users.id $where $orderby $limit»;

$res = sql_query(«SELECT torrents.seeders,multitracker,multi_time,f_seeders,f_leechers, torrents.banned, torrents.leechers, torrents.info_hash, torrents.filename, torrents.seeders_parse, torrents.leechers_parse, torrents.times_completed_parse, UNIX_TIMESTAMP() — UNIX_TIMESTAMP(torrents.last_action) AS lastseed, torrents.numratings, torrents.name, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.owner, torrents.save_as, torrents.descr, torrents.visible, torrents.size, torrents.added, torrents.views, torrents.hits, torrents.times_completed, torrents.id, torrents.type, torrents.numfiles, torrents.image1, torrents.image2, torrents.image3, torrents.image4, torrents.image5, categories.name AS cat_name, users.username FROM torrents LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN users ON torrents.owner = users.id WHERE torrents.id = $id»)
or sqlerr(__FILE__, __LINE__);

как их разбить на более маленькие? кто может, опишите процесс. очень надо.

Упражнения по SQL

SELECT (обучающий этап) задачи по SQL запросам 120 штук, DML 10 шт. Дистанционное обучение языку баз данных SQL. Интерактивные упражнения и тестирование по операторам SELECT,INSERT,UPDATE,DELETE языка SQL. SQL remote education. SQL statements exercises. Подзапросы, Соединение таблиц, Функции SQL, Введение в SQL, Скачать книги по SQL. Команды SQL,CREATE SEQUENCE,CREATE SYNONYM,CREATE USER,CREATE VIEW,Create Table,DROP,GRANT,INSERT,REVOKE,SET ROLE,SET TRANSACTION,SQL ALTER TABLE,SQL команды.

Как разбить SQL запрос на составные части для дальнейшего использования в SQLiteDatabase?

Всем привет.
С JAVAй я знаком недавно и стандартные средства работы с SQL мне не понравились.
Я привык запрос писать «одной строкой». Но в классе SQLiteDatabase нельзя отправить сырой запрос, а нужно отдельно заполнять данными каждый метод (.update(), .query(), .insert() . ).
Пример:

Есть ли стандартные методы для разбора запроса, чтобы его в последующем использовать в .insert(String table, String nullColumnHack, ContentValues values) и т.п.? А то в ручную парсить побаиваюсь, мало ли, ошибусь где-нибудь ))

Как разбить один большой запрос в базу sql на несколько маленьких

$query = «SELECT torrents.id, torrents.moderated, torrents.moderatedby, torrents.category, (torrents.leechers+torrents.f_leechers) AS leechers, (torrents.seeders+torrents.f_seeders) AS seeders, torrents.free, torrents.name, torrents.times_completed, torrents.size, torrents.added, torrents.comments, torrents.numfiles, torrents.filename, torrents.seeders_parse, torrents.leechers_parse, torrents.times_completed_parse, torrents.sticky, torrents.owner,» .
«IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, categories.name AS cat_name, categories.image AS cat_pic, users.username, users.class».($CURUSER ? «, EXISTS(SELECT * FROM readtorrents WHERE readtorrents.userid = «.sqlesc($CURUSER[«id»]).» AND readtorrents.torrentid = torrents.id) AS readtorrent» : «, 1 AS readtorrent»).» FROM torrents LEFT JOIN categories ON category = categories.id LEFT JOIN users ON torrents.owner = users.id $where $orderby $limit»;

$res = sql_query(«SELECT torrents.seeders,multitracker,multi_time,f_seeders,f_leechers, torrents.banned, torrents.leechers, torrents.info_hash, torrents.filename, torrents.seeders_parse, torrents.leechers_parse, torrents.times_completed_parse, UNIX_TIMESTAMP() — UNIX_TIMESTAMP(torrents.last_action) AS lastseed, torrents.numratings, torrents.name, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.owner, torrents.save_as, torrents.descr, torrents.visible, torrents.size, torrents.added, torrents.views, torrents.hits, torrents.times_completed, torrents.id, torrents.type, torrents.numfiles, torrents.image1, torrents.image2, torrents.image3, torrents.image4, torrents.image5, categories.name AS cat_name, users.username FROM torrents LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN users ON torrents.owner = users.id WHERE torrents.id = $id»)
or sqlerr(__FILE__, __LINE__);

как их разбить на более маленькие? кто может, опишите процесс. очень надо.

Как поделить друг на друга два запроса с различными условиями?

Есть таблица, в которой колонка менеджеров и колонка со статусами. Как посчитать сумму статусов Fully, деленную сумму записей со всеми статусами кроме N/A по каждому менеджеру?

Пытался изобразить таким способом, но ничего не вышло

Akina's user avatar

Akina's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.31.43551

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *