Мартин Киуру отлично и доступно рассказал то том, как можно написать Select для того что бы как можно быстрее достать то что нужно из БД Oracle 🙂
Метка: oracle
Итак состоялась наша встреча, посвященная базам данных.
Присутствовало около 40 человек и,не смотря на некоторые технические заминки в начале, все остались довольны.
Для затравки
Давайте напомню, что происходило на нашем заседании. Сами презентации будут выложены чуть позже. Необходимо время на обработку видео и сведения звука.
Открыл встречу Сергей Мудрецов(Skype) с доклада «Мир баз данных, его тенденции и тонкости» о Sybase и сравнении его с некторыми другими популярными и не очень OLAP решениями. Из презентации мы узнали о том что есть такая замечательная база как Sybase, получили представление о фишках приятных и не особо в MS SQL, MySQL, SAS и Progress. Доклад получился интересным, хотя и слегка затянутым. Было много вопросов из зала, в частности «что же такое OLAP?» и «с чем его едят?». Надеюсь эта тема ещё будет подниматься на следующих встречах.
После перерыва Мартин Киуру(Swedbank) продолжил заседание с презентацией «Oracle Secrets» о секретах Oracle.Тёмных тайн нам не открыли, однако поделились опытом в оптимизации запросов. Надеюсь теперь все имеют представление о построении запросов, операторах, которых не стоит использовать в конкретных случаях, хинтах, и собственно как посмотреть, что движок вытворяет с запросом и на что уходят драгоценные секунды. Из зала были также слышны ценные дополнения.
Завершил нашу встречу Андрей Солнцев(Hireright) с докладом «Evolutionary database design» о Эволюционном дизайне баз данных, проще говоря, об Agile разработке применительно к базам данных и о инструментах, которые позволяют внести порядок в процедуру разработки, установки и отката скриптов, версионирование. В частности Андрей посоветовал литературу по рефакторингу баз данных и вкратце ознакомил с использованием библиотек DB Deploy и LiquiBase, построенных на принципах, изложенных в этой книге.
В конце я вскольз рассказал о линейке продуктов Redgate для синхронизации структуры и данных между базами.
В перерывах участники активно общались между собой. Кто-то встретил старых знакомых, кто-то завёл новых. Мы рады, что встреча оказалась настолько интересной и вы нашли в себе силы прийти, несмотря на летнюю погоду :). Заполненные анкеты и собранные пожертвования помогут нам успешно провести следующее заседание.
Пользуясь случаем хотелось бы выразить благодарность
— Арсению Григорьеву(Aqris) и команде Aqris’a за гостепреимство
— Кириллу Линнику(Skype) за модераторство и конкурс с призами
— Захару Кириллову за неоценимую помощь с призами
— Александру Моченову(Tallink) за предоставление Devclub-у в пользование мега-пульта дял презентаций с лазерной указкой
— Евгению Холодкову(Ericsson) за диктофон с head-set’ом.
Домашнее задание.
Дабы поддержать добрую традицию приятных призов за вопросы, Кирилл предлагает вашему вниманию простую, но интересную задачку.
Итак, имеется следующая бизнес-логика:
Пользователь блокируется различными системами, которые находят его поведение небезопасным. Если тревога ложная, то разблокируется он один раз.
В итоге имеем простую табличку:
status_log: id (int)
user (varchar)
reason (varchar)
is_blocked (int 0-1)
change_time (datetime).
Проблема: в табличке записей крайне много.
Вопрос: как одним запросом найти всех пользователей, с временем и причиной первой блокировки, а так же временем и причиной разблокировки.
Ремарка: блок-разблок может происходить несколько раз.
Диалект решения — стандартный 92. Если вы знаете, что на другом диалекте можно это сделать еще эффективней — можете добавить и это решение, что добавит вам призовых баллов. Победитель будет объявлен на следующей встрече и без приза ему будет не уйти 😉 Ответы можно постить в комменты, или отправлять на e-mail — kirill точка linnik собака mail точка ee.
P. S. для тех, кто так и не уловил смысл ремарки, показываю на данных. допустим, у нас такая временная дата по одному юзеру (число — в блок?):
1 — 1
2 — 1
3 — 0
4 — 0
6 — 1
7 — 1
8 — 0
9 — 0
скрипт в конечном итоге по этому юзеру должен выдать 2(!!) записи:
даты 1 и 3 + даты 6 и 8. т.е. те даты, в период которых пользователь был заблочен. в период 3-6 и другие он в блоке не был 😉
Ждем комментариев, вопросов, предложений.
Юрий Муленко, a.k.a Казначей.