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

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


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

Выпуск 218 от 29 ноября 2008 г.

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

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

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

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

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


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

§ Добавил проверочных данных (сообщения от Fiolent и noname) для задачи 23.
Автор (@Nikotin) добавил данные для проверки задачи 150.

§ По просьбе Ozzy добавил новый топик для общения (779). Топик открыт для всех без ограничений. Обсуждать можно любые темы, которые не касаются упражнений.

§ Снял задачу 106, которая являлась как бы следствием задачи 105.
Вместо нее выставлена новая задача от vlksm (сложность 3 балла);

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
3. Arcan (150)
4. vlksm (150)
33. rem (139, 140,142)
40. GreyC (139, 142)

§ Новые лица в ТОР 100 и вернувшиеся туда:
100. Ashton (задач 124, время 24.053)

§ Продвинулись в рейтинге:
45. orange (137, 15.752)
48. _Bkmz_ (136, 4.755)
58. denzel (134, 216.971)
64. glassman (132, 49.812)
88. Чумазик (126, 177.441)
89. SoVa (125, 255.671)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
114. zjor (121, 134.670)
116. AlShin (121, 7.381)
118. enull (121, 28.426)
135. Romul_T (119, 46.266)
147. noname (114, 9.706)
176. Nariman Kurbanoff (112, 66.623)
160. breezemaster1 (115, 28.459)
165. Demonius (113, 98.952)
168. Vasilko (125, 7.273)
171. Nariman Kurbanoff (113, 73.667)

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

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Никотин В.М. (@Nikotin) 149 150 21 360 87 8.245 3.751 40 22 Nov 2008 28 Nov 2008
2 Сальников С.А. ($erges) 149 150 21 360 275 3.337 3.824 40 27 Nov 2008 28 Nov 2008
3 >Креславский О.М. (Arcan) 150 106 21 363 668 51.995 39.373 40 28 Nov 2008 28 Nov 2008
4 Карасёва Н.В. (vlksm) 150 106 21 363 936 78.003 49.585 40 27 Nov 2008 28 Nov 2008
5 Печатнов В.В. (pvv) 147 149 21 354 357 30.856 17.490 36 10 Oct 2008 28 Nov 2008
6 Селезнёв А.С. (Артём С.) 146 149 21 351 322 38.511 29.235 36 25 Sep 2008 21 Nov 2008
7 Держальцев В.А. (MadVet) 138 146 21 335 1257 60.806 28.482 28 24 Sep 2008 06 Oct 2008
8 Любченко В.А. (IAS56) 137 146 21 334 615 403.410 373.617 28 11 May 2008 23 Nov 2008
9 Мурашкин И.В. (lepton) 142 148 21 340 950 43.609 33.116 26 28 Oct 2008 10 Nov 2008
10 Голубин Р.С. (Roman S. Golubin) 141 145 21 337 1122 93.051 58.822 25 13 Sep 2008 22 Nov 2008
11 Зотов П.Г. (Ozzy) 141 145 21 339 255 52.914 70.561 25 20 Nov 2008 28 Nov 2008
12 Nikolaenko A.V. (Shadow77) 143 147 21 341 436 77.515 14.010 23 22 Oct 2008 24 Oct 2008
13 Солдатенков Ю.С. (SolYUtor) 139 146 21 333 819 22.624 6.102 20 14 Aug 2008 23 Oct 2008
14 Белогурова К. (Katy_Ekb) 134 143 21 323 552 10.673 4.673 18 27 Nov 2008 28 Nov 2008
15 Егоров А.Б. (ABEgorov) 138 144 21 331 180 12.906 8.815 18 03 Aug 2008 12 Aug 2008
16 Войнов П.Е. (pаparome) 140 146 21 332 1125 3.129 .213 17 22 Sep 2008 07 Oct 2008
17 >Дроздков А.Н. (anddros) 143 106 21 340 185 4.293 .921 17 28 Nov 2008 28 Nov 2008
18 Тарасов Д.Б. (Gavrila) 142 69 21 337 1189 26.474 3.677 17 27 Nov 2008 28 Nov 2008
19 iglbeat (iglbeat) 138 145 21 330 360 34.591 15.225 17 08 Aug 2008 25 Aug 2008
20 Северюхин Ю.А. (Venser) 129 142 21 313 335 4.914 .655 14 01 Feb 2008 04 Feb 2008

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Середа С.В. (Dabbler) 49 52 93 34 127 927 28 Nov 2008
2 >Левин (tiglet) 34 46 73 0 73 2031 28 Nov 2008
3 >Аксёнов И.Н. (Voyager) 35 35 66 0 66 3153 28 Nov 2008
4 >Nikeenko A. (terion) 32 32 60 0 60 3639 28 Nov 2008
5 >Савкина (koleso) 25 40 58 0 58 2492 28 Nov 2008
6 >Кузнецов В.С. (herrRo) 31 31 56 1 57 3896 28 Nov 2008
7 Бакулкин Е. (EugenBk) 20 42 47 0 47 2324 27 Nov 2008
8 >Piekara-Borucka A. (Fresa) 22 31 46 0 46 4140 28 Nov 2008
9 Dmitrieva K.S. (Kristina) 11 25 28 15 43 3527 24 Nov 2008
10 >Бачинский (Colin) 12 37 26 16 42 1842 28 Nov 2008
11 Golovanov (didi_83) 18 30 42 0 42 4081 27 Nov 2008
12 >Синельникова М.В. (Anoliya) 14 25 29 9 38 4413 28 Nov 2008
13 >selvanathan (jee) 22 22 38 0 38 5995 28 Nov 2008
14 >Петренко А.М. (APetrenko) 16 27 36 0 36 4852 28 Nov 2008
15 >Шиндин А.В. (AlShin) 14 121 35 0 35 116 28 Nov 2008
16 >Салманова И.М. (MIRacle)) 20 20 35 0 35 6286 28 Nov 2008
17 Никифоров А.П. (Arni) 1 39 2 32 34 1395 24 Nov 2008
18 Слайковский (Mobil) 15 25 34 0 34 5204 26 Nov 2008
19 >murarishetty S.M. (kannims) 19 19 31 3 34 6429 28 Nov 2008
20 Шакиров О. (xm?!_(mo3roBa9_akTuBHocTb) 11 38 25 8 33 2221 27 Nov 2008
21 >Азбель Е. (enull) 13 121 32 0 32 118 28 Nov 2008
22 . (gloomy2) 12 31 31 0 31 3820 27 Nov 2008
23 gurram S.R. (srikanth533) 17 17 25 5 30 7140 28 Nov 2008
24 s (sks) 19 19 30 0 30 7155 27 Nov 2008

Изучаем SQL

Массивы и списки в SQL Server 2005 (начало в вып.217)

Erland Sommarskog (оригинал: Arrays and Lists in SQL Server 2005 )
Перевод: Моисеенко С.И.

Вставка большого числа строк

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

Действительно, большинство методов, которые я описываю в этой статье, могут использоваться с этой целью. Большинство из них лучше всего приспособлено для обработки "массивов" единственных значений, хотя они могут быть переделаны для работы с записями, которые содержат несколько полей. Есть два метода, которые наилучшим образом подходят для этого, это - XML и трюк с INSERT-EXEC, который я обсуждаю в разделе "Превращение списка набор операторов SELECT".

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

Краткий обзор Методов

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

Итерационный метод

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

Использование CLR

SQL 2005 добавляет возможность написания табличнозначных функции (хранимых процедур и т.д) на языках .Net типа C# и Visual Basic. Это один из самых быстрых методов, и если Вы программируете на C# или VB, то обнаружите, что этот метод хорошо расширяется.

XML

XML - основной вариант, когда Вы должны вставить много строк за одну операцию. Для обработки списка с запятыми он, возможно, несколько медленный. Однако, если Вы используете новые методы XQuery, добавленные в SQL 2005, то XML покажет хорошую производительность.

Использование таблицы чисел для распаковки списка с запятыми-разделителями

Относительно "чистое" решение, которое лишь немного отстает в производительности от CLR.

Элементы фиксированной длины

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

Использование рекурсивных общих табличных выражений (СТЕ)

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

Динамический SQL

Для списка чисел это метод, видимо, является наиболее простым по сравнению с другими методами, но есть проблемы с безопасностью. И хотя со времен SQL 2000 производительность была значительно улучшена, этот метод все еще медленней большинства других методов, особенно для длинного входного списка.

Преобразование списка в набор операторов SELECT

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

Действительно медленные методы

Методы, которые используют charindex, patindex или LIKE. Эти решения невероятно медленны даже для короткого входного набора.

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

Полезная информация

§ Приглашаем вас посетить новый проект - Интерактивный учебник по SQL.
   Ресурс позиционируется как "справочное обеспечение" для сайта SQL-EX.RU, но может использоваться и независимо от него.

§ Онлайновый выпуск рассылки можно почитать на сайте.

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Хотите поддержать проект? Вот инструкция по применению. :-)

Контакты

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

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

В избранное