[EDIT] Ниже представлен не тот запрос, который у меня возникает с производительностью. Это всего лишь упрощенный запрос. Поскольку я только хотел бы знать, можно ли хранить несколько результатов в переменной и использовать эту переменную в состоянии IN.MYSQL: используемая переменная при условии IN
У меня был этот запрос ниже внутри процедуры, которую я хотел бы изменить для оптимизации.
SELECT * FROM request WHERE facility_id IN (SELECT facility_id FROM facility);
Что я хотел бы сделать, так это хранить подзапрос в переменной и использовать эту переменную в основном запросе.
SET @facilities = (SELECT facility_id FROM facility);
SELECT * FROM request WHERE facility_id IN (@facilities);
Но у меня есть ошибка Subquery returns more than 1 row
. Как я должен это делать? Любая помощь приветствуется.
Я нашел ссылку, которая предлагает такой способ http://www.mysqlperformancetuning.com/how-to-speed-up-mysql-by-optimization?nocache=1#comment-961. Но я не могу понять.
Вы идентифицировали это как узкое место производительности? Если ваш SP не делает много вещей с этим набором результатов, это выглядит как тяжелая работа для небольшого выигрыша. Вероятно, вы можете получить больший импульс, изменив дополнительный запрос на соединение (mysql традиционно обрабатывает соединения лучше, чем подзапросы, но сравнивает !!) – e4c5
@ e4c5 Это не фактический запрос. Я просто упростил это. Обычно запрос занимает не менее 20 секунд и иногда достигает 60 секунд для выполнения. Это включает в себя также взгляды, которые усложняют ситуацию. – Pelang
В таком случае, я думаю, вам нужно будет отредактировать свой вопрос и опубликовать более показательный запрос. Ясно, судя по полученному вами ответу, я не единственный, кто задавался вопросом, было ли это преждевременной оптимизацией. – e4c5