Должен ли я разбивать SQL-запросы в разных строках? Например, в проекте, над которым я работаю, у нас есть запрос, который занимает 1600 столбцов! 1600 + табуляции символов. Я написал такие запросы:
"SELECT bla , bla2 , bla FROM bla " .
"WHERE bla=333 AND bla=2" .
"ORDER BY nfdfsd ...";
Но они потребовали, чтобы я поместил их в одну строку, и сказали, что мой стиль - плохое форматирование. Почему это плохая практика?
sql
code-formatting
GorillaApe
источник
источник
.
), которые, как я видел, некоторые программисты обвиняют в снижении производительности.Ответы:
По причинам контроля исходного кода у нас есть разрывы строк после каждого предложения where или запятой. Так что твое выше превращается в
(табуляция и выравнивание здесь не имеют стандарта, но запятые обычно лидируют)
Тем не менее, без разницы в производительности.
источник
Запрос, состоящий из 1600 столбцов, звучит так, как будто он требует серьезного рассмотрения хорошим администратором базы данных.
Если запрос сложный, я заверну его. Если это будет просто, я оставлю это как одну строку, если это не будет слишком длинным, тогда я начну оборачивать это снова.
Все дело в управляемости и понимании того, что он должен делать, поэтому перенос или не перенос может быть решен на лету, если в вашей организации нет некоторых правил форматирования кода.
Re: это плохая практика кодирования. Едва! Это очень хорошая практика. Я не знаю веских причин использовать такой длинный запрос, и есть много веских причин для его переформатирования. Как я уже говорил, опытный администратор базы данных, вероятно, должен работать над этим.
источник
Единственное преимущество однострочных запросов, которое приходит на ум, заключается в том, что эти запросы могут быть несколько проще для поиска. Кроме этого, я в тупике. Лично я предпочитаю более читаемые, разделенные запросы.
источник
Многострочные комментарии хороши, практически необходимы при работе с большими объемами SQL. И если ваш язык программирования имеет кавычки heredoc, это даже лучше (так как многие редакторы могут выделить синтаксис SQL в них).
Пример:
При работе с запросами десятков строк (или сотен) текст и отступы делают текст работоспособным.
источник
Похоже, речь идет именно об определении большого запроса внутри своего рода языка программирования, когда вы помещаете запрос в строковый литерал и объединяете его.
Если это скомпилированный язык, это не должно иметь никакого значения - одна из первых оптимизаций, которые сделает компилятор, - это автоматическое объединение строковых литералов вместе, так что в любом случае вы получите большую строку.
Что касается синтаксиса, вам следует подумать о том, чтобы переместить запрос за пределы вашего кода - сохраните его в отдельном файле ресурсов .sql и попросите программное обеспечение прочитать этот файл. Используйте подготовленные операторы для переменных, если это не запрос, который создается динамически (т. Е. Операторы where и т. Д. Добавляются в зависимости от определенных параметров). Если он построен динамически, вы можете добавить собственные переменные замены, вставляя дополнительные параметры там и тогда, когда это необходимо.
Что касается столбцов 1600, я настоятельно рекомендую создать представление для этого, поэтому вместо
вы получите
ВЫБЕРИТЕ * ИЗ ViewX, ГДЕ y
Гораздо лаконичнее в вашем собственном коде.
источник
Я часто использую формат, предложенный @glasnt, для устранения неполадок в сложном запросе, но обычно запросы в одной строке.
Это может не ответить на ваш вопрос, но я бы также настоятельно рекомендовал разбить ваш запрос на более мелкие запросы. Очевидно, что это зависит от запроса, но чем больше предложений и объединений вы добавите в запрос, тем меньше механизм SQL сможет оптимизировать ваш запрос.
У вашего поставщика базы данных должны быть такие инструменты, как MySQL EXPLAIN (или настройка MSSQL SHOWPLAN_ALL), которые будут показывать вам, что база данных делает за кулисами для оптимизации вашего запроса, каждый раз, когда база данных должна создавать временную таблицу или что-то подобное, вы добавляете огромные задержки, когда вы говорите о нескольких одновременных пользователей.
Перемещая то, что может показаться тривиальной логикой, из SQL в ваш код, вы можете значительно повысить производительность - SQL отлично справляется с простыми операциями.
Очевидное преимущество, которое может иметь отношение к вам, состоит в том, что ваши запросы гораздо менее сложны и просты для чтения - просты в управлении (не более 1600 столбцов) и быстрее. Определенно всесторонняя победа.
Надеюсь это поможет :)
источник