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

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


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

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

http://www.sql-ex.ru

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

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

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

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

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


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

§ Добавил данных для проверки задачи 47 (сообщение от Roman S. Golubin).

§ Наконец-то пассажиры получили свои истинные имена. Их мне любезно предоставил Cyrilus, который готовит нам еще один подарок - 138-ю задачу.
И было лето, и будет весна: год четвертый.

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

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

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

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

Лучшие результаты (ТОР 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 21 Oct 2005
4 Голубин Р.С. (Roman S. Golubin) 137 137 20 312 48 6.480 05 Oct 2005 21 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 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 21 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 10 Oct 2005
12 Gershovich (VIG) 136 136 20 308 895 13.954 23 Aug 2005 21 Oct 2005
13 Колосов А.С. (KAS) 134 137 20 306 25 3.398 11 Mar 2005 14 Oct 2005
14 Алалыкин В.М. (BOBAH) 135 135 20 305 101 28.244 01 Sep 2005 16 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 09 Oct 2005
17 Hakobyan H.H. (hamlet) 134 136 20 304 220 37.869 07 May 2005 15 Oct 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 >Краснов К.М. (Kos123) 59 59 107 32 139 205 21 Oct 2005
2 Мирошников И. (mig) 56 56 99 23 122 317 20 Oct 2005
3 >Хафизов П.З. (зфмуд1973) 36 36 64 0 64 920 21 Oct 2005
4 Набиуллин (CitriX) 36 36 60 0 60 999 15 Oct 2005
5 >Власов (HandKot_) 34 34 59 0 59 1021 21 Oct 2005
6 >Васильев В.О. (vovan) 26 50 48 9 57 560 21 Oct 2005
7 Дымова О. (Jumper) 29 36 57 0 57 919 18 Oct 2005
8 >Liston B.D. (ProgrammerBen) 30 30 42 9 51 1169 21 Oct 2005
9 >Khudyakov A.A. (empacher) 18 79 41 9 50 126 21 Oct 2005
10 Zabolotney (Zab) 25 25 35 8 43 1347 20 Oct 2005
11 >mamchy (lenamam) 26 26 43 0 43 1348 21 Oct 2005
12 Уваров М.М. (m_than) 24 24 39 3 42 1373 20 Oct 2005
13 >Ryali (aragorn_iiit) 25 25 40 0 40 1419 21 Oct 2005
14 >Кунилов А.В. (Shrek) 25 25 40 0 40 1422 21 Oct 2005
15 Касьянов О.В. (Hilge) 15 80 35 4 39 121 20 Oct 2005
16 Калачев М. (matvey) 32 32 39 0 39 1464 21 Oct 2005
17 >Мишин Р.А. (dido83) 24 24 37 0 37 1516 21 Oct 2005
18 >Лутченков А.С. (Dr0nix) 24 24 37 0 37 1521 21 Oct 2005
19 >Кузьмин В.Н. (Trustee) 15 57 27 7 34 428 21 Oct 2005
20 >Блохин А.В. (alx___) 19 25 34 0 34 1442 21 Oct 2005
21 >Meduri R.K. (Ravi Kiran) 23 23 34 0 34 1636 21 Oct 2005
22 >Пучков М.В. (Micha) 23 23 34 0 34 1664 21 Oct 2005
23 >Kudryashov P.B. (cenobito) 17 39 33 0 33 929 21 Oct 2005
24 >Закревский В.Р. (Mr.Barbara) 13 28 32 0 32 1234 21 Oct 2005
25 Ефремов А.Н. (-=SaS=-) 24 24 32 0 32 1736 21 Oct 2005
26 Ковалев А.В. (Aleks 1C) 9 58 22 9 31 372 21 Oct 2005
27 gupte A. (adi) 24 24 28 3 31 1799 21 Oct 2005
28 >Белая Л.А. (LiWhite) 17 24 30 0 30 1547 21 Oct 2005

Изучаем SQL

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

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

Использование Курсора

Если возможно, избегайте использования курсоров SQL Server. Курсоры вообще потребляют много ресурсов SQL Server, а также снижают производительность и масштабируемость ваших приложений. Если Вам необходимо выполнить построчные операции, постарайтесь найти другой метод решения задачи. Некоторые варианты состоят в том, чтобы вместо этого выполнить задачу на клиенте, использовать временные или производные таблицы, использовать коррелированные подзапросы, а также оператор CASE. В случае необходимости можно использовать множественные запросы.

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

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

Если Вы не имеете никакого выбора, кроме как использовать курсоры в вашем приложении, постарайтесь разместить базу данных tempdb в SQL Server на отдельном физическом устройстве для достижения лучшей производительности. Это важно потому, что курсоры используют tempdb для временного хранения своих данных. Чем быстрее ваш дисковый массив, тем быстрее будет ваш курсор.

Кроме того, если Вы не имеете другого выбора, кроме как использовать курсор вашего приложения на стороне сервера, старайтесь использовать FORWARD-ONLY или FAST-FORWARD, READ-ONLY курсор. Работая с обходимыми в одном направлении данными только для чтения, используйте опцию FAST_FORWARD вместо опции FORWARD_ONLY, поскольку она имеет внутреннюю оптимизацию производительности по скорости. Этот тип курсора создает наименьшую нагрузку на SQL Server. Если Вы не можете использовать курсор FAST_FORWARD, то рассмотрите возможность применения следующих курсоров в указанном порядке, пока не найдете тот, который подойдет вам наилучшим образом. Порядок определяется характеристиками производительности от самого быстрого к самому медленному: dynamic, static и keyset.

Использование курсоров может уменьшить параллелизм и привести к ненужным захватам и блокировкам. Поможет избежать этого использование курсора READ_ONLY, если он применим. Если же вам требуется выполнить обновления, попробуйте использовать опцию курсора OPTIMISTIC, чтобы уменьшить блокировки. Старайтесь избегать опции курсора SCROLL_LOCKS, который снижает параллелизм.

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

Доступные для поиска аргументы

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

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

1. Выражения в поисковых столбцах:
       - Математические операции, например: qty+1> 100
        - Функции даты/времени, например: DATEPART (mm, Datecolumn) = 5
        - Строковые функции, например: LEFT(Column,2) = 'GR'
2. Некоторые операторы LIKE, например: LIKE '%'
3. NOT LIKE, IS NOT NULLS, and NOT EXISTS
4. Операции CONVERT и CAST

(окончание следует...)

Контакты

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

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

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

В избранное