MySQL возвращает все select вместо выходной переменной - PullRequest
0 голосов
/ 12 марта 2019

Найден очень простой пример, который будет представлять это поведение:

DECLARE Existing INT DEFAULT 0;
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1;
SELECT FOUND_ROWS() INTO Existing;
Select Existing;

Это вернет оба выбора, вместо того, чтобы просто показывать Существующее (то же самое для выходных переменных).

У меня есть сохраненныйпроцедура, которая имеет сотни выборок, я хочу получить только одну информацию о пользователе, которая определяется на основе всех этих различных выборок и т. д.

Я не хочу получать 3 МБ бесполезных данных из БД, я просто хочуВозврат 16 байтов, больше ничего.

Возможно ли это с MySQL?Некоторое время я решил перейти на MySQL, и мы провели большую подготовку к архитектуре, серверам и т. Д., Много месяцев работы.

Теперь я хочу перенести хранимую процедуру, нокажется, основано на всех других вопросах, что MySQL не заботится о бережливом подходе и возвращает все эти данные, делая хранимые процедуры практически бесполезными (по крайней мере, когда вы работали с большими базами данных SQL Server, используя хранимые процедуры / функции, и все работает как выожидать, хранить все внутренние данные, выбирать и т. д., где они принадлежат, не возвращать их клиенту).

Я нашел информацию, что она должна поддерживаться клиентом, но это противлюбой вид наилучших практик программирования (т. е. отправка бесполезных данных MB между серверами, в то время как вам нужно всего 4 байта, основная причина использовать хранимые процедуры вместо написания кода, например, в C # (так как вам нужно было бы сделать сотни вызовов в БД, чтобы получитьт.е. обзор аккаунта)).

Я что-то упустил?

Я хочу вызвать хранимую процедуру, которая может выполнять сотни вызовов другой хранимой процедуры, обрабатывать, например, 100 МБ данных, и возвращать только выходные переменные (т. Е. 5, обеспечивающие обзор учетной записи) ...

У нас также есть движок ИИ, который все еще использует SQL Server, и там вы не можете позволить себе получать десятки МБ на единицу, если вам приходится делать это миллионы раз в день.Это сломало бы все приложение ...

Пожалуйста, только скажите мне, может ли MySQL выводить результат хранимой процедуры в выбранные переменные.Мне плевать на мегабайты бесполезных для меня данных.Я не спрашиваю о счетах или что-нибудь еще.Я говорю о сложной логике, и я хочу знать только, может ли MySQL делать то, что делает Microsoft SQL Server?(Хранимая процедура возвращает выходной муравей, поэтому у вас есть выходной параметр, поэтому хранимая процедура существует)

1 Ответ

1 голос
/ 12 марта 2019

Почему вы делаете выбор, если вы не хотите результатов? Более простой способ получить результаты - использовать count(*):

DECLARE Existing INT DEFAULT 0;
SELECT COUNT(*) INTO Existing FROM users WHERE id = pid;

SQL_CALC_FOUND_ROWS и FOUND_ROWS() специально для ситуации, когда вы хотите, чтобы запрос возвращал результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...