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

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


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

http://www.sql-ex.ru

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

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

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

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

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


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

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

§ Cyrilus решил 140 задачу, что пока оценивается как 5 место. 139 задачу решил Gavrila, и заполнил десятку результативными участниками третьего этапа; многообещающее 9 место.

§ Новое лицо в сотне:
cmalex (задач 106,время 23.047)

§ Почти все лидеры решили замененную 58 задачу (в чем нет ничего удивительного :-)). Поэтому остановлюсь на тех, кто продвинулся в рейтинге:
Дайнин (121, 91.032)
Tunin (120, 26.397)
ds (112, 93.600)
Dmitry Faleleev (109, 2.112)
Dark_Elf (108, 18.402)

§ На этой неделе сертифицированы:
Garkin (A06011431) [BK] (г.Москва, Россия)

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Агапов В. (KERBEROS) 141 58 20 333 89 6.183 1.262 11 20 Nov 2006 24 Nov 2006
2 Карасёва Н.В. (vlksm) 141 58 20 333 196 27.850 2.710 11 18 Nov 2006 24 Nov 2006
3 Мурашкин И.В. (lepton) 141 58 20 333 240 14.865 4.724 11 18 Nov 2006 24 Nov 2006
4 Голубин Р.С. (Roman S. Golubin) 141 58 20 333 457 54.984 33.803 11 18 Nov 2006 24 Nov 2006
5 Кувалкин К.С. (Cyrilus) 140 58 20 329 728 11.471 1.573 7 22 Nov 2006 24 Nov 2006
6 Васьков Е.В. (Johan) 140 58 20 329 124 12.713 11.402 7 20 Nov 2006 24 Nov 2006
7 Войнов П.Е. (pаparome) 139 58 20 326 453 2.689 .000 4 20 Nov 2006 24 Nov 2006
8 Юлдашев М.Р. (Snowbear) 138 139 20 324 441 4.106 .000 3 02 Oct 2006 14 Nov 2006
9 Тарасов Д.Б. (Gavrila) 139 139 20 325 454 20.006 .277 3 23 Nov 2006 24 Nov 2006
10 Держальцев В.А. (MadVet) 138 139 20 324 540 34.249 3.085 3 08 Oct 2006 19 Oct 2006
11 Зверев Д.Л. (dimzv) 138 58 20 322 1114 4.386 .000 0 22 Nov 2006 24 Nov 2006
12 Палий С.А. (PS_Sergey) 138 58 20 322 201 11.568 .000 0 20 Nov 2006 21 Nov 2006
13 Утёнков М.Н. (=Maxim=) 138 58 20 322 200 24.998 .000 0 19 Nov 2006 24 Nov 2006
14 Валуев Д.И. (Fiolent) 138 58 20 322 1173 54.715 .000 0 20 Nov 2006 24 Nov 2006
15 Slobodcicov A.N. (Testo) 136 138 20 319 337 7.171 .000 0 25 Aug 2006 10 Nov 2006
16 Иванов А.Н. (Goapsy) 136 138 20 319 270 18.911 .000 0 07 Aug 2006 09 Oct 2006
17 Абашин П.И. (Dizil) 137 58 20 318 453 3.966 .000 0 20 Nov 2006 20 Nov 2006
18 Мальцев А.В. (Палкин) 137 58 20 318 93 15.234 .000 0 18 Nov 2006 21 Nov 2006
19 Крижевич С.А. (yaff) 136 137 20 317 481 14.998 .000 0 24 Oct 2006 25 Oct 2006
20 Вязовецков А.С. (alex_v) 136 137 20 317 141 22.788 .000 0 20 Oct 2006 20 Oct 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Гневышев А.Е. (shu) 64 64 117 0 117 706 24 Nov 2006
2 >Дегтярёв Д.В. (ДимоК) 52 52 95 0 95 1102 24 Nov 2006
3 >Жирнов Д.А. (ДимонХХХ) 43 43 75 19 94 1118 24 Nov 2006
4 lytic (lytic) 49 49 89 2 91 1180 23 Nov 2006
5 >Антонов А. (xxanderr) 46 46 82 9 91 1181 24 Nov 2006
6 Павлючков Е. (igene) 48 48 87 0 87 1244 21 Nov 2006
7 Тарасова Н.И. (Tarni) 36 52 77 0 77 1085 22 Nov 2006
8 >Музалевская (setik) 41 41 72 0 72 1640 24 Nov 2006
9 >Alex T. (Teya) 20 51 51 19 70 759 24 Nov 2006
10 >Шорабеков Г.У. (Galimjan) 41 41 69 0 69 1734 24 Nov 2006
11 >Тимко Д. (Gleb) 30 44 64 0 64 1432 24 Nov 2006
12 Белинский А.Г. (Skvorl) 34 40 60 0 60 1808 23 Nov 2006
13 Hasnaruni H. (hasulnarul) 33 33 59 0 59 2068 22 Nov 2006
14 >Фесик А.М. (AlexF) 12 58 25 32 57 425 24 Nov 2006
15 >Харланчук М.Г. (MKharlanchuk) 35 35 57 0 57 2172 24 Nov 2006
16 >Бородкина М.И. (marishkin) 17 49 42 14 56 777 24 Nov 2006
17 >Носков К.П. (MouseK) 28 28 49 3 52 2375 24 Nov 2006
18 Лобов И.В. (Lobov Igor) 29 29 49 1 50 2467 23 Nov 2006
19 Повернов М.С. (shtormik) 28 28 49 0 49 2537 23 Nov 2006
20 Заозерский А.Ю. (ShadowZ) 32 32 45 3 48 2619 24 Nov 2006
21 >Старкова М. (Morozka) 33 33 48 0 48 2620 24 Nov 2006
22 Коркина А.М. (Reject) 19 41 43 3 46 1484 23 Nov 2006
23 Педяш Ю.А. (alximik) 13 54 26 19 45 688 24 Nov 2006
24 Профессор Ж. (waspworths) 4 50 11 29 40 675 23 Nov 2006
25 Hsu Y.R. (SQL_Reviewer) 25 25 40 0 40 2959 23 Nov 2006
26 >Белоусова А. (Настенька) 26 26 40 0 40 2999 24 Nov 2006

Изучаем SQL

Производительность CTE

Jerry Dixon (оригинал: CTE Performance)
Перевод Моисеенко С.И.

Я только закончил читать статью в сети, которая утверждает, что табличные переменные могут быть вдвое быстрей, чем CTE. Это немного смутило меня, поскольку я недавно тестировал сложную пользовательскую функцию (UDF), которая использовала CTE вместо табличных переменных. Версия с CTE оказалась более чем в двадцать раз быстрее! Я решил выполнить некоторые тесты, подобные тем, что были опубликованы в цитируемой статье. Главное различие между моими тестами и тестами в статье заключалось в том, что мой операторы CTE и INSERT не содержали предложения WHERE. (Мне требовался большой набор данных для этого теста.)

Тест с табличной переменной:

DECLARE @Temp TABLE (EntryDate DATETIME
        ,IASCommodityPK INT
        ,FutureMonthPK INT
        ,FutureYear SMALLINT
        ,Basis DECIMAL(7,4))
INSERT INTO @Temp
SELECT EntryDate, IASCommodityPK, FutureMonthPK, FutureYear, [Value]
FROM IASForwardPrice
SELECT
        t1.Basis AS 'T1'
        ,t2.Basis AS 'T2'
FROM @Temp t1
    INNER JOIN @Temp t2 ON t1.IASCommodityPK = t2.IASCommodityPK
        AND t1.FutureMonthPK = t2.FutureMonthPK
        AND t1.FutureYear = t2.FutureYear
        AND t1.EntryDate = t2.EntryDate
WHERE t1.FutureMonthPK = 10 AND t1.FutureYear = 2006

Тест с CTE:

WITH Temp
AS
(
    SELECT EntryDate, IASCommodityPK, FutureMonthPK, FutureYear, [Value] AS 'Basis'
    FROM IASForwardPrice
)
SELECT
    t1.Basis AS 'T1'
    ,t2.Basis AS 'T2'
FROM Temp t1
    INNER JOIN Temp t2 ON t1.IASCommodityPK = t2.IASCommodityPK
        AND t1.FutureMonthPK = t2.FutureMonthPK
        AND t1.FutureYear = t2.FutureYear
        AND t1.EntryDate = t2.EntryDate
WHERE t1.FutureMonthPK = 10 AND t1.FutureYear = 2006

Я выполнял эти тесты на таблице, которая содержала немного более чем 50 000 строк. Еще раз, мои результаты однозначно отдали предпочтение CTE с коэффициентом двадцать. Анализируя планы выполнения, я обратил внимание, что тест с табличной переменной использовал 97 % всего времени просто для загрузки данных в переменную. Тесту с CTE это не требовалось. Фактически, план выполнения для теста с CTE не отличался плана, созданного для теста, который непосредственно использовал исходные таблицы. (Я проверял.) В этом сценарии табличные переменные и должны быть медленнее.

Что это означает? Ну, то, что CTE быстрее в этом конкретном случае. Это означает, что CTE МОЖЕТ быть быстрее, чем табличные переменные. Это также означает, что Вы должны проверить каждый метод самостоятельно, а не предполагать, что один метод быстрее другого.

Наконец, это означает, что я никого ничему не учу :-). Я просто думаю, что это было интересно.

16/08/2006

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

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

§ Поступила в продажу книга SQL. Задачи и решения, посвященная анализу ошибок, допускаемых при решении задач первого этапа. На сайте издательства Питер можно сделать заказ и познакомиться с содержанием.

Контакты

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

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

В избранное