Подтвердить что ты не робот

Будет ли "Где 0 = 1" проанализировать полную таблицу или просто вернуть имена столбцов

Я столкнулся с этим вопросом:

SQL Server: выберите Top 0?

Я хочу спросить, использую ли я запрос

SELECT * FROM table WHERE 0=1

или

SELECT TOP 0 * FROM table

он сразу же вернет имена столбцов или продолжит анализ всей таблицы и в конце возвращает нулевые результаты?

У меня есть производственная таблица с 10 000 строк - будет ли она проверять условие WHERE на каждой строке?

4b9b3361

Ответ 1

Оптимизатор запросов SQL Server достаточно умен, чтобы понять, что это условие WHERE может никогда никогда не создавать результат true в любой строке, поэтому он не беспокоит фактическое сканирование таблицы.

Если вы посмотрите на фактический план выполнения такого запроса, легко увидеть, что ничего не делается, и запрос немедленно возвращается:

введите описание изображения здесь

Ответ 2

MySql достаточно умен, чтобы обнаружить его и знать, что это невозможно сделать.

desc SELECT * FROM table WHERE 0=1;

enter image description here

Ответ 3

В запросе

SELECT * FROM table WHERE 0=1

предложение WHERE никогда не будет истинным, поэтому SQL Server не будет сканировать всю вашу таблицу.

И в запросе

SELECT TOP 0 * FROM table

вы указываете TOP 0, поэтому SQL Server очень умный, поэтому он никогда не сканирует вашу таблицу для возврата 0 строк.

Оба запроса возвращают только заголовки столбцов.

Ответ 4

Оба запроса используются для получения пустого набора таблицы;

SELECT TOP 0 * FROM table
SELECT * FROM table WHERE 0=1

Как и для достижения ниже вещей:

  • Чтобы получить такую ​​же структуру имени столбца
  • Используется для данных столбца возврата, но нет данных
  • И хотите, чтобы запрос проверялся на подключение.