Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 59


Информационный Канал Subscribe.Ru

Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 59 (29 октября 2005 г.)

http://www.sql-ex.ru

Новым посетителям сайта

Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 59-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ Изменилась стоимость сертификата - 760 рублей. Как я уже писал, это связано с увеличением расходов на оплату хостинга и почтовых услуг. Просроченные заказы удалены. Для непросроченных заказов стоимость остается прежней - 680 рублей.

§ Обновлены страницы заказа сертификатов. Появилась возможность оплаты посредством webmoney и Яндекс.Деньги. Будем подыскивать сервис для оплаты кредитными картами. Однако пока не могу назвать конкретных сроков.

§ Первый сертификат отправлен в Грузию. Похоже, что пора карту рисовать :-).

§ Подлатал проверку двух задач. Спасибо empacher (#65) и Войнову П.Е. & VIG (#66) за демонстрацию неверных решений, принимавшихся системой.

§ Число подписчиков - 2622

Число участников рейтинга - 3768

Число участников второго этапа - 407

Сертифицировано на сайте - 36

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Духин А. (Shark) 137 137 20 312 30 2.635 10 Aug 2005 19 Oct 2005
2 Зверев Д.Л. (dimzv) 137 137 20 312 643 2.900 08 Aug 2005 01 Sep 2005
3 Кувалкин К.С. (Cyrilus) 137 137 20 312 224 5.129 06 Jul 2005 27 Oct 2005
4 Голубин Р.С. (Roman S. Golubin) 137 137 20 312 48 6.480 05 Oct 2005 28 Oct 2005
5 Носков Н.В. (niko2) 137 137 20 312 47 7.855 22 Aug 2005 27 Oct 2005
6 Гонтовой В.А. (noname) 137 137 20 312 105 9.808 29 Jun 2005 04 Oct 2005
7 Леденев С.А. (Shurgenz) 137 137 20 312 313 9.900 27 Jun 2005 21 Oct 2005
8 Бураков С.Г. (burakov58) 137 137 20 312 164 12.100 12 Jul 2005 09 Sep 2005
9 Валуев Д.И. (Fiolent) 137 137 20 312 662 26.627 27 Jun 2005 28 Oct 2005
10 Страшников А.С. (EffEct) 137 137 20 312 164 54.939 26 Oct 2005 28 Oct 2005
11 Галиаскаров Э.Г. (Galogen) 137 137 20 312 221 61.437 01 Jul 2005 21 Sep 2005
12 Мельникова И.А. (Iris_m) 137 137 20 312 478 91.764 02 Sep 2005 10 Oct 2005
13 Gershovich (VIG) 136 136 20 308 895 13.954 23 Aug 2005 28 Oct 2005
14 Колосов А.С. (KAS) 134 137 20 306 25 3.398 11 Mar 2005 26 Oct 2005
15 Алалыкин В.М. (BOBAH) 135 135 20 305 101 28.244 01 Sep 2005 23 Oct 2005
16 Сныткин В.Л. (Ded I) 134 136 20 304 252 7.456 12 May 2005 09 Sep 2005
17 Рахманов И.Е. (bloom) 134 136 20 304 148 14.171 11 May 2005 09 Oct 2005
18 Hakobyan H.H. (hamlet) 134 136 20 304 220 37.869 07 May 2005 15 Oct 2005
19 Шипунов И. (IAS) 134 136 20 304 334 82.080 13 May 2005 26 May 2005
20 Иткин И.Л. (joseph_itkin) 132 136 20 299 375 2.849 07 Mar 2005 13 Apr 2005

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >hidden (man2) 61 61 109 32 141 198 27 Oct 2005
2 Чичиль Н.А. (Lord Nick) 55 59 103 28 131 248 28 Oct 2005
3 Криницын М. (Mikst) 42 42 75 9 84 664 27 Oct 2005
4 >Гречишников О.В. (OVG) 47 47 79 0 79 727 28 Oct 2005
5 Костяев (olegovic) 46 46 76 1 77 749 26 Oct 2005
6 >Ефремов А.Н. (-=SaS=-) 34 58 72 0 72 499 28 Oct 2005
7 Майоров О.С. (awacs) 40 40 60 9 69 861 27 Oct 2005
8 >Бутов Н.Н. (User_Name) 41 41 65 0 65 913 28 Oct 2005
9 Власов (HandKot_) 23 57 44 17 61 334 28 Oct 2005
10 anand A. (mohan_abb) 36 36 60 0 60 1024 27 Oct 2005
11 Харисов С.И. (salavat) 34 34 59 0 59 1047 27 Oct 2005
12 >Panasyk (Pana) 34 34 59 0 59 1048 28 Oct 2005
13 shenderovsky (ski) 26 44 48 9 57 720 27 Oct 2005
14 Рязанцева А.А. (Аня) 28 28 49 8 57 1093 25 Oct 2005
15 >Fedorov A. (Новайс) 39 39 57 0 57 1095 28 Oct 2005
16 >Вергилюш В.С. (Валёк) 40 40 57 0 57 1097 27 Oct 2005
17 Захарова Л.А. (LidaZ) 26 46 48 4 52 646 26 Oct 2005
18 Ru M.P. (MR) 27 33 49 0 49 1077 24 Oct 2005
19 Vemula V.K. (Vasanth) 28 28 49 0 49 1241 26 Oct 2005
20 Бельков О.Б. (Volshebnik) 25 25 41 0 41 1423 25 Oct 2005
21 Назаров Е. (Johnny_N) 25 25 40 0 40 1460 25 Oct 2005
22 Бахарев О.М. (baharev) 22 22 31 9 40 1470 27 Oct 2005

Изучаем SQL

Характерные ошибки в кодах Transact-SQL, вызывающие падение производительности (окончание, начало в вып. 55-58)

Randy Dyess (оригинал: Common Transact-SQL Performance Coding Errors )
Перевод Моисеенко С.И.

Комментарии

Комментирование исходных кодов всегда является хорошей практикой программирования. Разработчики должны включать комментарии в свой исходный код, чтобы объяснить назначение кода или логики следующей ниже программы или программного блока. Используйте комментарий в стиле /* … */, для комментирования блока кода, или "--" (два дефиса), для комментирования одной строки. Хотя вы сегодня легко понимаете назначение фрагмента кода, другим это может оказаться непонятным. Или, в чем я часто убеждаюсь, что, понимая то, что я сделал два года назад, при пересмотре фрагмента кода с целью внести изменения, я забывал, почему применил тот или иной прием. Спустя годы, я уяснил для себя одну вещь, которая неизменно оказывается справедливой для всех компаний, с которыми я работал, - разработчики приходят и уходят. Работать с кодами, которые Вы никогда не видели прежде, было бы намного легче, и незначительная логическая ошибка или программная проблема разрешалась быстрее, если бы разработчик потратил несколько мгновений и объяснил большие фрагменты кода.

Например:

/* комментарий для цикла while */

WHILE (…)
BEGIN
    Statement 1
     Statement 2
     -- ROD 12/12/2000 комментарий для одной строки, почему я что-то изменил
     Statement 3
END

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

/********** Хранимая процедура или имя запроса: имя хранимой процедуры ***
** Имя файла: имя файла, содержащего код запроса
** Описание: Описание хранимой процедуры
**
**
**
**
**
** Безопасность: пользователь dbo. Роль XXXX_User имеет разрешение EXECUTE.
** Пользователи не имеют разрешения на select, update, insert или delete для
** доступа к таблицам.
**
** Разрешения устанавливаются скриптом, прилагаемым к файлу хранимой процедуры
**
** Возврашаемые значения: @intErrorCode
**
** Вызов: dbo.sp_name
**
**
** Вызовы: dbo.sp_name, и т.д.
**
**
** Целевая структура:
**      База данных: имя базы данных
**      Таблица: имя таблицы **      Столбцы: Column1 SMALLINT
**          Column2 VARCHAR
**          и т.д..
**
** Исходная структура:
**      База данных: имя базы данных
**      Таблица: имя таблицы
**      Столбцы: Column1 SMALLINT
**          Column2 VARCHAR
**          и т.д.
**
** Автор: John Doe
** Дата: 10/28/04
********************************
** История изменений
********************************
** Дата: Автор: Описание:
** -------- ---------- -------------
** 03/28/02 John Doe Исходная версия.
** 04/03/02 John Doe Изменение структуры запроса,
** вызванное контролем изменений #x
**
***********************************/

См. BOL: Using Comments, -- (Comment), and /*...*/ (Comment)

Длина столбца таблицы

Разработчики должны стремиться поддерживать столбцы как можно короче. Рассмотрите возможность использование INTEGER вместо DECIMAL, NUMERIC или BIGINT, SMALLDATETIME вместо DATETIME, SMALLINT или TINYINT вместо INTEGER, SMALLMONEY вместо MONEY и BIT в качестве флага вместо INTEGER.

Использование типов данных меньшей размерности позволит увеличить эффективность хранения данных. Меньшие типы данных эквивалентны меньшим размерам строк, что позволяет разместить больше строк на странице данных и соответственно уменьшить число необходимых страниц. Это не только позволит экономить дисковое пространство, но и увеличит производительность за счет меньшего числа считываемых страниц при выполнении запроса и необходимого объема памяти для их размещения. Кроме того, это уменьшает объем информации, посылаемой клиенту по запросу.

Выбор типов данных часто диктуется требованиями клиента и первоначальным созданием базы данных. Создатели базы данных и разработчики должны хорошо ориентироваться в имеющихся типах данных, чтобы эффективно выбирать их для определения столбцов.

См. BOL: Field Length, Data Types, Data Type Precedence, Precision, Scale, and Length, and Data Type Synonyms

Ключи кластеризованного индекса

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

См. BOL: Estimating the Size of a Table with a Clustered Index, Clustered Indexes, Using Clustered Indexes, and CREATE INDEX

Заключение

С написанием каждого документа стандартов, будут появляться исключения к пунктам, содержавшимся в этом документе, в процессе разработки одного или более программных проектов. Пункты, противоречащие "лучшим методам", содержащимся в документе стандартов, представляют собой исключения, и пока имеется мало случаев, в которых эти исключения необходимы, в большинстве случаев пункт может быть переделан, чтобы соответствовать "лучшим методам". Разработчики и администраторы баз данных должны свободно обсуждать проблемы, которые им кажутся исключениями из "лучших методов" принятой политики, ПРЕЖДЕ ЧЕМ они фактически включат работу в некоторый код и, соответственно, допустят создание исключение, если это потребуется. Если исключение гарантировано, тогда необходим простой комментарий, написанный выше кода, объясняющий, почему это исключение было сделано, чтобы предотвратить вопросы, возникающие при пересмотре кода.

Исключения, которые являются обычными в среде некоторой компании, могут быть включены в политику, чтобы стать "Лучшими методами", продвигаемыми компанией. Не все среды подобны и то, что не приемлемо в одной компании, возможно, необходимо принимается в другой в силу обстоятельств, не управляемых отдельными администраторами или разработчиками баз данных. Часто администраторы базы данных и разработчики должны делать допущения на проект базы данных, что бизнес требования могут создать ситуацию, когда код выйдет из обычно принимаемых стандартов или исключений, что просто обусловлено ограничениями, необходимыми для чрезвычайной гибкости в хранимой процедуре. Большинство "лучших методов", которые являются общепринятыми сегодня, подходит для большинства компаний, однако, при создании любой политики необходима гибкость.

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77@yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Архив рассылки
Отписаться
Вспомнить пароль

В избранное