Ограничить столбец на основе другого столбца - PullRequest
0 голосов
/ 18 марта 2019

Предположим, у меня есть следующий запрос, в котором меня интересуют только 3 столбца:

SELECT CustomerID, Country, IF(Country="Mexico", City, null) City FROM Customers;

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

SELECT CustomerID, Country, City FROM Customers;

Другими словами, ограничивает ли использование значений оператор if запрос медленнее?

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Ваш первый запрос должен выполнять дополнительную условную логику. Это требует немного больше обработки. С другой стороны, объем возвращаемых данных немного меньше (из-за значений NULL), поэтому это может уравновесить.

Однако вы возвращаете большие объемы данных из таблицы, и реальное ограничение производительности заключается в чтении данных.

Итак, разница между ними должна быть очень незначительной.

С другой стороны, если вас интересует только одна страна, используйте WHERE:

SELECT CustomerID, Country, City
FROM Customers c
WHERE Country = 'Mexico';

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

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

Разница минимальная.

Стоимость вашего запроса обычно основана на доступе к блоку ввода-вывода и количестве строк. Дополнительный вычисляемый столбец практически не имеет значения.

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