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

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


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

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

http://www.sql-ex.ru

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

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

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

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


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

§ На сайте сертифицирован первый иностранец, совсем не говорящий по-русски. Если вы еще не были в Египте, посмотрите, какие люди там живут.

§ Незначительное уточнение претерпела формулировка задачи 15 DML (сообщение reuvenab).

§ Добавлены данные для улучшения проверки задачи 78 (Roman S. Golubin).

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

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

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

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

Лучшие результаты (ТОР 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 23 Sep 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 07 Oct 2005
4 Голубин Р.С. (Roman S. Golubin) 137 137 20 312 48 6.480 05 Oct 2005 07 Oct 2005
5 Носков Н.В. (niko2) 137 137 20 312 47 7.855 22 Aug 2005 19 Sep 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 06 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 07 Oct 2005
10 Галиаскаров Э.Г. (Galogen) 137 137 20 312 221 61.437 01 Jul 2005 21 Sep 2005
11 Мельникова И.А. (Iris_m) 137 137 20 312 478 91.764 02 Sep 2005 22 Sep 2005
12 Gershovich (VIG) 136 136 20 308 895 13.954 23 Aug 2005 07 Oct 2005
13 Колосов А.С. (KAS) 134 137 20 306 25 3.398 11 Mar 2005 18 Sep 2005
14 Алалыкин В.М. (BOBAH) 135 135 20 305 101 28.244 01 Sep 2005 05 Oct 2005
15 Сныткин В.Л. (Ded I) 134 136 20 304 252 7.456 12 May 2005 09 Sep 2005
16 Рахманов И.Е. (bloom) 134 136 20 304 148 14.171 11 May 2005 15 Jun 2005
17 Hakobyan H.H. (hamlet) 134 136 20 304 220 37.869 07 May 2005 03 Jun 2005
18 Шипунов И. (IAS) 134 136 20 304 334 82.080 13 May 2005 26 May 2005
19 Иткин И.Л. (joseph_itkin) 132 136 20 299 375 2.849 07 Mar 2005 13 Apr 2005
20 Spirin (spirin) 131 136 19 296 158 13.461 21 Jan 2005 25 Aug 2005

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Карайчев А.А. (rock) 54 54 93 19 112 376 07 Oct 2005
2 >Моисеенко Е.А. (Moiseenko) 53 53 92 17 109 417 07 Oct 2005
3 >Ковалев А.В. (Aleks 1C) 49 49 83 0 83 645 07 Oct 2005
4 Kuleshov (Plastilin) 46 46 78 0 78 701 07 Oct 2005
5 Надольский В.В. (pH) 35 35 54 9 63 921 07 Oct 2005
6 >Игошев Л.А. (Organism) 34 34 59 0 59 995 07 Oct 2005
7 Мартынов А.С. (New) 34 34 59 0 59 998 05 Oct 2005
8 >Зоммер Я. (Yan) 32 32 53 0 53 1098 07 Oct 2005
9 Khudyakov A.A. (empacher) 14 59 32 17 49 296 06 Oct 2005
10 >Шеожев А.М. (coven) 28 28 49 0 49 1176 07 Oct 2005
11 Zagorodnikh S.V. (zag) 22 46 40 3 43 689 05 Oct 2005
12 >ivanov (ivan2) 28 28 39 0 39 1416 07 Oct 2005
13 Зелинский Д. (Дедушка) 10 57 24 14 38 290 07 Oct 2005
14 Чуйков А.А. (tchuykov) 5 59 14 23 37 249 07 Oct 2005
15 Lisicina T.G. (Aristeja) 24 24 37 0 37 1455 06 Oct 2005
16 >Светлов А. (Ihtiandr) 23 23 34 0 34 1581 07 Oct 2005
17 Глотов Д.В. (prizma) 4 53 9 23 32 308 07 Oct 2005
18 Prokopenko (Prok) 11 47 23 9 32 618 05 Oct 2005
19 >Tutisani T. (Developer) 22 22 31 0 31 1726 07 Oct 2005
20 >Машенцева (yuliya) 22 22 31 0 31 1743 07 Oct 2005
21 Polyakov G.S. (GeorgeIII) 25 25 31 0 31 1752 06 Oct 2005
22 Голубин Р.С. (Roman S. Golubin) 14 137 30 0 30 4 07 Oct 2005
23 Власенко Н.М. (kolya) 10 55 21 9 30 476 07 Oct 2005

Изучаем SQL

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

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

Возвращение большего количества данных, чем это необходимо (например, SELECT * …),

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

Сокращение числа столбцов, возвращаемых отдельными запросами, увеличивает возможность того, что для таких запросов может быть генерировано покрытие индексами. Покрытие индексами может заставить оптимизатор отказаться от дорогостоящих поисков закладок (bookmark lookups). Часто при настройке хранимой процедуры сокращение числа столбцов, возвращаемых запросом, устраняет проблемы произвдительности, связанные с поисками закладок.

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

Хранимые процедуры, имена которых начинаются с sp_

Настоятельно рекомендую, чтобы Вы не создавали никаких хранимых процедур, используя sp_ как префикс. Сервер SQL всегда ищет хранимую процедуру, начинающуюся sp_, в следующем порядке:

1. Хранимая процедура в базе данных master.
2. Хранимая процедура, основанная на любых предоставленных квалификаторах (имя базы данных или имя владельца).
3. Хранимая процедура, используя dbo в качестве владельца, если Вы не указали другого владельца.

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

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

Намеки (хинты - hint) оптимизатору

Оптимизатор SQL Server на основе оценки стоимости динамически определяет стратегию обработки запроса, основанную на текущей структуре таблицы/индекса и данных. Это динамическое поведение может быть преодолено с помощью хинтов оптимизатора, забирая некоторые решения из рук оптимизатора и инструктируя его использовать определенную стратегию обработки. Это делает поведение оптимизатора статическим, и не позволяет ему динамически обновлять стратегию обработки при изменении структуры таблицы или индекса, а также изменения данных.

Разработчикам не следует помещать хинты оптимизатора в свои коды. Они должны позволить оптимизатору SQL Server определять наилучший способ выполнения запроса и не пытаться навязать ему тот вариант, который они полагают лучшим.

См. BOL: Query Tuning Recommendations, Hints, Locking Hints, and SET TRANSACTION ISOLATION LEVEL.

Использование Системных Объектов в Коде

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

Microsoft реализует ряд представлений в стандарте ANSI на протяжении нескольких последних версий SQL Server, чтобы помочь разработчикам достичь их целей в получении информации из системных таблиц SQL Server, непосредственно не обращаясь к самим таблицам. Эти представления ANSI гарантировано будут работать при установке сервиспаков, фиксов и переходе на новую версию. Разработчики должны использовать эти представления ANSI всякий раз, когда им необходимо обратиться к системным объектам.

Имеющиеся представления схемы

  • CHECK_CONSTRAINTS
  • COLUMN_DOMAIN_USAGE
  • COLUMN_PRIVILEGES
  • COLUMNS
  • CONSTRAINT_COLUMN_USAGE
  • CONSTRAINT_TABLE_USAGE
  • DOMAIN_CONSTRAINTS
  • DOMAINS
  • KEY_COLUMN_USAGE
  • PARAMETERS
  • REFERENTIAL_CONSTRAINTS
  • ROUTINE_COLUMNS
  • ROUTINES
  • SCHEMATA
  • TABLE_CONSTRAINTS
  • TABLE_PRIVILEGES
  • TABLES
  • VIEW_COLUMN_USAGE
  • VIEW_TABLE_USAGE
  • VIEWS

Пример запроса к системной таблице

if exists (select * from dbo.sysobjects where id = object_id(N'[tmplnSameweek]') and
OBJECTPROPERTY(id, N'IsUserTable') = 1)
Drop table [tmplnSameweek]

Пример запроса к представлению ANSI

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND
TABLE_NAME = 'tmplnSameweek' AND TABLE_TYPE = 'BASE TABLE')
DROP TABLE dbo. TmplnSameweek

Использование системных объектов станет еще большей проблемой, когда будет выпущен релиз SQL Server 2005 и разработчики обнаружат, что часть написанного ими кода, который они писали в предположении неизменности столбцов системных объектов, вызывает ошибки, поскольку эти столбцы были удалены или переименованы. Лично я сталкиваюсь с этим в некоторых запросах, с помощью которых я получал экспертные оценки. В течение долгого времени я выяснял, какие биты находятся в некоторых из этих зарезервированных столбцов, и использовал это знание, чтобы получить дополнительную информацию для моих оценок. Эти столбцы исчезли, и мне придется потратить дополнительное время, чтобы обновить мои оценочные скрипты, отказываясь от этой дополнительной информации в преддверии выхода версии 2005.

См. BOL: Information Schema Views

(продолжение следует...)

Контакты

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

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

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

В избранное