Я недавно видел вопрос "где 1 = 1 утверждение" ; конструкция SQL, которую я часто использовал при построении динамического SQL, чтобы написать более чистый код (с точки зрения основного языка).
Вообще говоря, влияет ли это дополнение к SQL-статистике на производительность запросов? Я не ищу ответа относительно конкретной системы баз данных (потому что я использовал ее в DB2, SQL Server, MS-Access и mysql) - если только это невозможно, не вдаваясь в подробности.
performance
optimization
transistor1
источник
источник
1=1
WHILE 1=1
пункт. Тем не менее, это не оказывает заметного влияния на время выполнения.Ответы:
Все основные РСУБД, насколько я знаю, имеют постоянные оценки. Это должно оцениваться практически мгновенно в любом из них.
источник
С точки зрения SQL Server, если вы делаете это
WHERE 1=1
для обеспечения динамической передачи параметров и пропуска параметра из оценки, я бы посоветовал вам прочитать пару статей из SQL Server MV Erland Sommarskog. Его подход избавляет от необходимости делать некоторые другие трюки внутри динамического SQL (например,WHERE Column = Column
конструкцию или использованиеWHERE (Col = Val OR 1=1) and (Col2 = Val2 OR 1=1)
конструкции). «1 = 1» не должно вызывать проблем с производительностью, как упомянул @JNK (я добавил +1 к его ответу, и это тот, который следует принять), я думаю, вы найдете несколько хороших советов из статьи Эрланда о Динамический SQL, и вы также увидите, что он все еще использует тот1=1
для случаев, когда параметры не передаются, но он избегает их для отдельных параметров, которые не передаются, он просто не 'источник
С MySQL вы можете проверить, запустив EXPLAIN EXTENDED и позже SHOW WARNINGS, чтобы увидеть фактический запрос. TL; DR: это оптимизируется.
источник
In older MySQL releases, extended information was produced using EXPLAIN EXTENDED. That syntax is still recognized for backward compatibility but extended output is now enabled by default, so the EXTENDED keyword is superfluous and deprecated. Its use results in a warning, and it will be removed from EXPLAIN syntax in a future MySQL release.
он был удален в MySQL v 8.0.