SELECT DISTINCT street ORDER BY postalcode
не имеет смысла (и я думаю, что это недопустимый ANSI SQL), кроме случаев, когда postalcode
функционально зависит от street
- что я не думаю, так как ваш самый низкий уровень Внутренний отбор -postalcode-on-Main-Street не имеет смысла, если бы это было так. MySQL позволит вам сойти с рук, но результаты будут противоречивыми. Что ты здесь пытаешься сказать?
Я не думаю, что это должно быть особенно медленно, поскольку то, что у вас есть, не является зависимым подзапросом; подзапросы выполняются только один раз и не повторно для каждой внешней строки. Вы можете переписать его как три отдельных запроса -
- получить самый низкий почтовый индекс на главной улице;
- получить улицу со вторым по величине почтовым индексом ниже (1) (непоследовательно);
- получить информацию о клиентах на улице (2).
без разницы в исполнении. (Действительно, для ясности, возможно, лучше сделать это.)
Вы могли бы переписать их как объединения, используя self-left-joins-on-less-is-null, чтобы получить минимумы / максимумы, но я не думаю, что вы получите что-нибудь это для этого примера, и это будет очень грязно, учитывая два уровня соединения и второе по величине требование. Этот запрос особенно медленный на практике? Как выглядит EXPLAIN
? Вы проиндексировали postalcode
и street
?