double arrow

Форматирование операторов для лучшего восприятия

Форматировать операторы SQL для лучшего восприятия вполне естественно, но, тем не менее, многие программисты не очень заботятся о виде создаваемых ими операторов. И хотя от внешнего вида оператора его скорость работы не зависит (база данных на красоту оператора внимания не обращает), правильное форматирование является первым шагом на пути оптимизации оператора SQL. При рассмотрении оператора SQL с точки зрения ускорения его работы прежде всего удобно сделать оператор максимально простым для чтения. Но как определить, является оператор удобным для чтения или нет?

Вот некоторые правила, следуя которым можно улучшить восприятие оператора.

  • Каждое ключевое слово со своим выражением следует начинать с новой строки. Например, выражение с ключевым словом FROM не следует размещать в той же строке, что и выражение с ключевым словом SELECT. Точно также выражение с ключевым словом WHERE не следует размещать в той же строке, что и выражение с ключевым словом FROM и т. д.
  • Если аргументы выражения не умещаются в одной строке, строки продолжения начинайте с отступами, используя для этого символы табуляции или пробелы.
  • Отступы должны быть согласованными.
  • При использовании в операторе нескольких таблиц используйте для таблиц псевдонимы. Использование полных имен таблиц быстро засоряет оператор и делает его трудным для понимания.
  • Не увлекайтесь использованием комментариев в операторе (конечно, если соответствующая реализация SQL их допускает). Комментарии полезны с точки зрения документирования, но слишком большое их число мешает понять суть оператора при чтении.
  • При выборе нескольких столбцов в выражении ключевого слова SELECT имя каждого из столбцов лучше начинать с новой строки.
  • При выборе нескольких таблиц в выражении ключевого слова FROM имя каждой из таблиц лучше начинать с новой строки.
  • При наличии нескольких условий в выражении ключевого слова WHERE каждое из условий лучше начинать с новой строки — тогда легко будет увидеть и каждое из условий в отдельности, и тот порядок, в котором они используются.

Вот пример трудного для чтения оператора.

SELECT CUSTOMER_TBL.CUST_ID, CUSTOMER_TBL.CUST_NAME,

CUSTOMER_TBL.CUST_PHONE, ORDERS_TBL.ORD_NUM, ORDERS_TBL.QTY

FROM CUSTOMER_TBL, ORDERS_TBL

WHERE CUSTOMER_TBL.CUST_ID = ORDERS_TBL.CUST_ID

AND ORDERS_TBL.QTY > 1 AND CUSTOMER_TBL.CUST_NAME LIKE 'G%'

ORDER BY CUSTOMER_TBL.CUST_NAME;

CUST_ID CUST_NAME CUST_PHONE ORD_NUM QTY

----------------------------------------

287 GAVINS PLACE 3172719991 18D778 10

А вот пример того же оператора после форматирования с целью улучшения его восприятия.

SELECT C.CUST_ID,

С.CUST_NAME,

С.CUST_PHONE,

O.ORD_NUM,

О.QTY

FROM CUSTOMER_TBL С,

ORDERS_TBL О

WHERE C.CUST_ID = 0.CUST_ID

AND O.QTY > 1

AND С.CUST_NAME LIKE 'G%'

ORDER BY 2;

CUST_ID CUST_NAME CUST_PHONE ORD_NUM QTY

----------------------------------------------

287 GAVINS PLACE 3172719991 18D778 10

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

Изменение внешнего вида оператора никак не влияет на скорость его выполнения, но помогает вам увидеть и сделать необходимые изменения при отладке длинных и сложных операторов. Так, во втором операторе легко увидеть, какие столбцы и из каких таблиц выбраны, как выбранные таблицы связаны и какие условия наложены на данные, предполагаемые получить в результате запроса.

Правильный порядок таблиц в выражении FROM

Порядок таблиц в выражении ключевого слова FROM может иметь значение в зависимости от того, какие правила чтения операторов SQL использует оптимизатор. Например, может оказаться более выгодным разместить имена небольших таблиц в начале списка, а имена больших – в конце. Некоторые из наиболее опытных пользователей считают, что размещение самых больших таблиц в конце списка оказывается более эффективным.

Проверьте по документации к используемой вами реализации SQL, нет ли в ней советов по поводу использования нескольких таблиц в списке ключевого слова FROM.


Сейчас читают про: