Dev ›
Полезные сведения о языке запросов 1С 8.2 ›
#16
12.12.12 23:02
(12) iceflash, Статья действительно для новичков. Над оформлением ещё поработаю. Вы забыли упомянуть, что на скорость выполнения также влияет выбор СУБД (одно дело - если это MSQL, а другое дело - PostGreSql или ORACLE). Говорить, что такая-то конструкция выполняется 100% быстрее, чем другая неправильно. Можно лишь рекомендовать, что в большинстве случаев такая конструкция будет оптимальнее, чем другая (полное соединение всегда будет проигрывать объединению с опцей Все в том же PostgreSql). Говорят тоже, что вложенные запросы - это зло и лучше использовать временные таблицы или соединения. Но в ряде случаев эффективнее оказывается могут выполняться запросы со вложенными запросами. На скорость выполнения, как вы заметили правильно, влияет план запроса, который формирует СУБД (в профайлере можно посмотреть) на основании таблиц, связей между таблицами, индексами,размером таблиц,данными, своей статистике запросов и обращений и т.д. И для одного и того же запроса может быть сколько угодно различных планов выполнения запроса, в который можно вмешиваться на низком уровне, изучая конкретную реализацию СУБД. Что касается Различные - это ключевое слово намного читабельнее, чем СГРУППИРОВАТЬ ПО и в простых случаях именно всегда его и рекомендуют использовать, при этом разницы большой в скорости выполнения между ними нет. При добавлении индекса по полю данные запрсы будут выполняться одинаково быстро.По поводу 1С программисту необязательно вникать в планы запросов,которые весьма различаются в разных СУБД. 1С сделала всё, чтобы упростить написание запросов для программистов 1С. 1С программисту важно понимать, что даже если запрос маленький и записан одной секцией выбрать - это не значит, что система будет выполнять обращение к одной таблице и для самой СУБД данный запрос может быть интерпретирован как 7-этажный запрос. В случае составных реквизитов или при наличии разыменования полей 1С программист должен понимать, что фактически в запрос добавляются множественные соединения с количеством, соответствующим количеству типов составного поля + соединения через разыменования полей;поэтому где только возможно нужно ограничивать число таких таблиц с помощью того же ключевого слова ВЫРАЗИТЬ; в случае строк неограниченной длины - знать, что нужно ограничивать их длину в самом запросе иначе может быть вылет из-за нехватки памяти; понимать, что временные таблицы надо своевременно удалять из памяти и не использовать их там где не надо. 1С -это ещё и объектная среда, поэтому отличия между 1С и чисто реляционными СУБД разительные. Язык SQL намного гибче 1С, но отчасти, из-за того, что 1С присущи два подхода - как табличный, так и объектный.