Повторное использование псевдонима в MySQL

Я хочу спросить кое-что о повторном использовании псевдонима.

У меня есть такой пример,

1-й запрос:

select
@tmp1 := if (AA.id= '','abcde','yuiop') as tmp1,
CONCAT_WS('-',
SUBSTR(@tmp1, 1, 2),
SUBSTR(@tmp1, 3, 4),
SUBSTR(@tmp1, 5)
) AS tmp1_res
FROM some_database as AA

2-й запрос:

select
CONCAT_WS('-',
SUBSTR(if (AA.id= '','abcde','yuiop'), 1, 2),
SUBSTR(if (AA.id= '','abcde','yuiop'), 3, 4),
SUBSTR(if (AA.id= '','abcde','yuiop'), 5)
) AS tmp1_res
FROM some_database as AA

Оба запроса работают хорошо, но мне интересно, какой из них более эффективен.

В первом запросе я вижу, что подстрока вызывает только определенную, на мой взгляд, переменную "заполнитель". Я предполагаю, что он не будет сначала проверять AA.id 3 раза, а затем разделять их, что, я думаю, будет более эффективным. Это верно ?

Спасибо

РЕДАКТИРОВАТЬ

Спасибо за ответы. Я только что протестировал оба метода, оказалось, что второй метод немного быстрее (примерно 0,001 ~ 0,004 секунды), чем первый.

еще одна вещь, которую я действительно не понимаю, что касается 1-го запроса, такое же поведение, как и 2-й запрос, или нет? (насколько я понимаю, второй запрос проверяет столбец id по условию if каждый раз, когда используется функция вычитания, а первый только один раз выполняет условие if)

Глядя на план выполнения, можно узнать, есть ли между ними существенная разница.

Ken White 27.09.2018 04:46

SQL-запросы не выполняются точно так же, как вы их пишете. Оптимизаторы запросов обрабатывают общие элементы запроса как единицы, а затем повторно используют эти единицы по своему усмотрению. Вы можете обнаружить, что план объяснения (выполнения) точно такой же. Кстати, здесь вы имеете дело не с псевдонимами столбцов, а с использованием переменных вместо функций if.

Paul Maxwell 27.09.2018 04:50

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

TomC 27.09.2018 07:27
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
34
0

Другие вопросы по теме