Как стать автором
Обновить
11.79

MySQL *

Свободная реляционная СУБД

Сначала показывать
Порог рейтинга
Уровень сложности

Nested Sets + MySQL TRIGGER

Время на прочтение7 мин
Количество просмотров9.7K

Задача


Задача такая же как и в предыдущей статье, только применимо к MySQL.

Грабли


Хорошая новость ребята! В MySQL нет проблемы с рекурсивными триггерами! Разработчики MySQL просто тупо лочат изменяемую таблицу даже на уровне триггера, вот редиски. Но, собственно, нас может остановить только отключение электричества.
Есть небольшая лазейка, с… объединенными таблицами. Хотя я не нашел в документации подтверждения того, что это так специально было задумано, но и отрицания тоже не было. Правда есть вероятность того, что эту лазейку могут прикрыть, хотя я не вижу в этом смысла.
Увы, механизм триггеров в MySQL новый и довольно сырой, что накладывает некоторые ограничения на его использование, но все же его достаточно для решения нашей задачи.
Читать дальше →
Всего голосов 37: ↑33 и ↓4+29
Комментарии47

Средства создания горячих BackUp`ов MySQL

Время на прочтение3 мин
Количество просмотров33K
Доброго времени суток. Недавно я задался вопросом о том, как делать горячие BackUp`ы MySQL-серверов — ниже компиляция из прочитанного. Заранее хочу сказать, что данный пост является скорее большой заметкой, чем полноценной статьёй. Я намеренно уклоняюсь от описания синтаксиса — на эту тему уже немало написано — я же ставил перед собой другую цель — составить краткий обзор основных методов с характерными особенностями:
далее
Всего голосов 57: ↑53 и ↓4+49
Комментарии49

Определяем порядок столбцов в составном индексе

Время на прочтение5 мин
Количество просмотров21K
Хочу поделиться простым эмпирическим методом, который я использую для определения того, в каком порядке должны идти столбцы в составном индексе. Этот способ подходит не только для MySQL, он также применим к любым СУБД, в которых используются b-tree индексы.

Давайте начнем с запроса, который возвращает пустой результат, но при этом делает полный скан таблицы. EXPLAIN покажет на нем, что нет доступных индексов (т.е. possible_keys = NULL)

SELECT * FROM tbl
WHERE
  status='waiting' AND
  source='twitter' AND
  no_send_before <= '2009-05-28 03:17:50' AND
  tries <= 20
ORDER BY date ASC LIMIT 1;
Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии17

Почему Ларри Эллисон так стремился купить MySQL?

Время на прочтение1 мин
Количество просмотров1.4K
Когда Ларри Эллисон, директор Oracle, объявил в понедельник о покупке компании Sun, он ни словом не обмолвился о MySQL, своём конкуренте на рынке малых СУБД. Именно этот сегмент остаётся непокрытым в продуктовой линейке Oracle. Все хорошо помнят, как страстно Ларри Эллисон жаждал завладеть этой шведской компанией три года назад. В течение всего 2006 года Ларри Эллисон неоднократно предлагал выкупить MySQL, но трое друзей-шведов, основателей MySQL, неизменно отвергали его предложение от «империи зла», взлёт которой произошёл благодаря сотрудничеству с ЦРУ, после чего MySQL в итоге продалась Sun.

Теперь же мечта Эллисона сбылась, и он даже не говорит, что купил Sun только ради MySQL.

В свете всех известных фактов очень странно смотрятся размышления некоторых аналитиков о том, что MySQL не является конкурентом Oracle. Это слишком узкий взгляд на вещи, потому что не принимаются в расчёт долговременные планы Эллисона, а также перспективы развития самой MySQL (например, в версии 5.4 этой СУБД уже появилась поддержка 16-процессорных серверов x86, а по некоторым тестам производительность выросла на 40000%).

Кстати, по странной случайности выход MySQL 5.4 был запланирован на 21 апреля, но за день до этого произошла сделка с Oracle.

via betanews
Всего голосов 55: ↑47 и ↓8+39
Комментарии49

Истории

Основы репликации в MySQL

Время на прочтение10 мин
Количество просмотров328K
С репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
Читать дальше →
Всего голосов 72: ↑70 и ↓2+68
Комментарии44

Ускоряем выборку произвольных записей MySQL

Время на прочтение3 мин
Количество просмотров33K
Последнее время оживилась публика с вопросом случайной выборки из таблицы. Решений по оптимизации полно, и нового сейчас я вам наверное ничего не покажу, просто напомню про основные методы оптимизации — упрощение запроса и индексацию. Без предисловий про фриленсеров, сразу к делу ;)

Читать дальше →
Всего голосов 59: ↑50 и ↓9+41
Комментарии22

Хранимые процедуры в MySQL

Время на прочтение2 мин
Количество просмотров27K
По долгу службы приходится глубоко разбираться с сабжем.
К сожалению, это не самое лучшее изобретение человечества, поэтому иногда приходится вбивать костыли, чтобы хоть как-то пользоваться этой штукой.
О костылях
Всего голосов 37: ↑35 и ↓2+33
Комментарии36

Расчет периодов стажа в MySQL

Время на прочтение3 мин
Количество просмотров7.2K
На одном форуме задали вопрос о том, как правильно посчитать разность дат в MySQL для учета стажа сотрудника. На первый взгляд вопрос оказался простым, но при детальном рассмотрении все оказалось куда интереснее.
Читать дальше →
Всего голосов 41: ↑33 и ↓8+25
Комментарии10

MySQL: Хранимые процедуры и динамический SQL

Время на прочтение1 мин
Количество просмотров50K
Если кто-либо из вас пытался сделать вроде бы очевидную вещь, а именно, создать sql запрос внутри процедуры передав ей имя таблицы, пользователя и т.п., то скорее всего натыкались на ошибку, о том, что нельзя использовать динамический sql.

SET @mytable='users';
SELECT * FROM @mytable;

Такая конструкция работать не будет. А что же делать, чтобы она заработала?
Читать дальше →
Всего голосов 69: ↑65 и ↓4+61
Комментарии26

Особенность оптимизатора MySQL 5.1.30 порядок следования таблиц в UPDATE

Время на прочтение1 мин
Количество просмотров967
Добрый день. Я расскажу об одной из забавных особенностей оптимизатора MySQL 5.1.30, которая заставляет перед обновлением внимательно проверить запросы.
Для любопытных: «теперь SET-выражения выполняются не в порядке следования выражений слева направо, а в порядке следования обновляемых таблиц».
Но, всё по порядку.
Всего голосов 45: ↑43 и ↓2+41
Комментарии16

Восстановление базы MySQL из бинарных логов

Время на прочтение2 мин
Количество просмотров43K
Базы данных иногда пропадают. Человеческий фактор и всё-такое… Если вы не делали бекапов (а надо бы) или они уже устарели, не отчаивайтесь, — есть ещё возможность восстановить утерянную информацию.

Подробнее
Всего голосов 65: ↑60 и ↓5+55
Комментарии28

Через год

Время на прочтение1 мин
Количество просмотров1K
Может это и правильно, но как-то неожиданно.

select
'2008-02-27' + INTERVAL 1 YEAR, -- 2009-02-27
'2008-02-28' + INTERVAL 1 YEAR, -- 2009-02-28
'2008-02-29' + INTERVAL 1 YEAR, -- 2009-02-28
'2008-03-01' + INTERVAL 1 YEAR; -- 2009-03-01


UPD По результатам обсуждения резюмирую:
а) это стандартное поведение и других СУБД и более того
б) данный способ расчета годового периода узаконен и применяется в офлайн.
Всего голосов 79: ↑64 и ↓15+49
Комментарии58

Представления (VIEW) в MySQL

Время на прочтение10 мин
Количество просмотров436K
В комментариях Хабра упоминались вопросы по использованию представлений. Данный топик является обзором представлений, появившихся в MySQL версии 5.0. В нем рассмотрены вопросы создания, преимущества и ограничения представлений.

Что такое представление?


Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.

Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
Читать дальше →
Всего голосов 105: ↑104 и ↓1+103
Комментарии22

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург

Блокировки в MySQL

Время на прочтение4 мин
Количество просмотров108K
На хабре часто обсуждаются принципы работы MySQL. Данный хабратопик посвящен механизмам блокировок, используемым в MySQL. Топик поможет начинающим изучать MySQL и, в некоторой степени, опытным хабралюдям.

Механизм блокирования в MySQL


Одновременный доступ нескольких клиентов к хранилищу данных может приводить к ошибкам различного типа. Например, одновременное чтение одним клиентом и запись другим клиентом одной и той же строки таблицы с большой вероятностью приведет к сбою или чтению некорректных данных. Механизмы блокировок позволяют избежать ситуаций одновременного доступа к данным, регламентируя механизм взаимодействия пользователей между собой.
Читать дальше →
Всего голосов 65: ↑62 и ↓3+59
Комментарии18

Курсоры в Mysql.

Время на прочтение6 мин
Количество просмотров108K
По долгу службы мне пришлось сталкиваться с курсорами. Хотелось бы рассказать, что это такое и о некоторых особенностях работы с ними. Официальная документация тут — dev.mysql.com/doc/refman/5.1/en/cursors.html Википедия даёт такое определение курсору курсор:
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии13

Хранение файлов в MySQL и их быстрая раздача

Время на прочтение3 мин
Количество просмотров96K
Думаю у многих возникала необходимость хранить файлы, связанные с записью в таблице. Это может быть картинка к новости, аватар, загруженный пользователем файл — да все, что угодно. Обычно в этому случае поступают просто — файл ложится в файловую систему, а ссылка на него — в запись БД.
Но у такого классического похода множество недостатков:
  • файлы не удаляются при удалении соответствующей записи БД
  • проблемы при одновременной попытке обновления файла
  • нарушение синхронизации между БД и файловой системой при откате транзакции
  • при резервном копировании и восстановлении информации в БД может возникнуть рассинхронизация с файловой системой
  • файлы не подчиняются ограничениям доступа, наложенным с помощью БД

Больше о проблемах, возникающих при хранении файлов отдельно от БД можно почитать в презентации SQL Antipatterns, раздел Phantom Files, страница 60. Кстати, автор презентации предлагает решение — хранить файлы прямо в БД, в поле типа BLOB. Правда следует замечание, что это должно быть взвешенное решение в каждом конкретном случае. Ведь при таком способе хранения файлов вебсервер должен при каждом запросе вызывать некий скрипт, который будет извлекать файл из БД и отдавать пользователю, что неминуемо отрицательно скажется на производительности.
Для поиска решения данной проблемы был проведен мозговой штурм и придумано несколько вариантов решения проблемы:
Читать дальше →
Всего голосов 71: ↑59 и ↓12+47
Комментарии99

Kaj Arnö: MySQL и Sun — как дела?

Время на прочтение2 мин
Количество просмотров753
Кай Арно

Кай Арно, вице-президент MySQL AB по работе с сообществом пользователей — удивительный человек.

Он родом из Финляндии, а сам по происхождению швед (и похож этим на Линуса Торвальдса).
Он любит Россию, но не знает русского. Это не мешает ему вести свой блог на русском языке — blogs.arno.fi/fandorin.
Для этого он пишет текст на английском, переводит его на русский через Google Translate, и если в обратном переводе с русского на английский ещё что-то можно понять — публикует. Получается неплохо.

В 2001 году он продал MySQL AB половину своей компании, занимающуюся обучением MySQL, и с тех пор работал в корпорации вице-президентом по консалтинговым услугам, вице-президентом по разработке, и в итоге, с 2005 года — вице-президентом по связям с с пользовательским сообществом.

С тех пор как Sun купила MySQL AB в феврале этого года, Кай ездит по всему миру и помогает разработчикам, клиентам и сообществам пользователей Sun и MySQL найти общий язык и научиться сосуществовать в гармонии.

На днях Кай Арно приезжает в Москву и будет рассказывать о том, какой будет новая жизнь MySQL и каковы перспективы его развития при поддержке Sun — компании, которая известна своей благосклонной к opensource-сообществу политикой.

Встречу с Каем организует московская группа пользователей MySQL при поддержке клуба «Бизнес в стиле .RU».
Встреча начнется сегодня, в понедельник 1 декабря в 19-00 в Москве в здании Высшей школы экономики на улице Мясницкой, дом 20, в аудитории 124.

Времени чтобы зарегистрироваться на встречу осталось очень мало, но ещё можно успеть — для этого надо заполнить форму по адресу reg.styleru.net/registration/mmug.

Помимо Кая на встрече выступит Константин Осипов — лидер команды разработчиков ядра MySQL. Он поделится откровениями о том, что нового будет в MySQL 6.0 и расскажет о различных хитростях оптимизации работы версии 5.1, которая на прошлой неделе наконец-то вышла из статуса беты и обрела статус Generally Available.

Итак!
1. Регистрируемся.
2. Приходим к 19-00.
3. Показываем документ (паспорт, водительское удостоверение, студенческий билет, что угодно, где есть ваше имя и фамилия).
4. Проходим по указателям до аудитории и общаемся с докладчиками!
Всего голосов 56: ↑47 и ↓9+38
Комментарии28

Все то, о чем мы так долго мечтали — первый официальный релиз MySQL 5.1

Время на прочтение1 мин
Количество просмотров702
Собственно сегодня наткнулся на ссылку http://lists.mysql.com/announce/565 и сразу спешу поделиться с хабро-сообществом.

Здесь говорится, что сегодня вышел первый релиз MySQL Server 5.1.30 Generally Available (GA), который является первым релизом, рекомендованным для использования на продакшн серверах.

Основные нововведения в версии 5.1. представлены по этой ссылке http://dev.mysql.com/doc/refman/5.1/en/mysql-nutshell.html

А также описаны в статье tuta_larsonЧто нового в MySQL 5.1

Также немаловажно будет ознакомится со списком открытых багов для версии 5.1. — http://dev.mysql.com/doc/refman/5.1/en/open-bugs.html


Ну и собственно ссылка на скачивание — http://dev.mysql.com/downloads/
Всего голосов 57: ↑53 и ↓4+49
Комментарии33

MySQL и JOINы

Время на прочтение6 мин
Количество просмотров147K
Поводом для написания данной статьи послужили некоторые дебаты в одной из групп linkedin, связанной с MySQL, а также общение с коллегами и хабролюдьми :-)

В данной статье хотел написать что такое вообще JOINы в MySQL и как можно оптимизировать запросы с ними.

Читать дальше →
Всего голосов 85: ↑83 и ↓2+81
Комментарии67

Постраничная навигация с MySQL при большом количестве записей

Время на прочтение7 мин
Количество просмотров40K
Рано или поздно многие крупные проекты сталкиваются с проблемами производительности при постраничной навигации по записям. Некоторые из них решают эту проблему ограничением количества доступных для просмотра записей (скажем, не больше 1000). Вполне приемлемое решение. Но в этом случаем могут возникнуть проблемы с индексированием сайта сторонними поисковиками, которые и представляют наибольшую угрозу. В этой статье я хотел бы отказаться от привычной для всех панели навигации вида «1..2..3..4..» в пользу простой «вперед… назад» (будет проще объяснить), но это не проблема реализовать подобное и с первым вариантом.
Более точно определить тему, назвав, какое количество записей считать достаточно большим для появления тормозов, не получится, так как эта цифра для всех разная и сильно зависит от того, насколько быстрые у Вас жесткие диски, сколько памяти, и какая часть Ваших данных уже закеширована в ней и тд. Но если Вы и Ваши сервера ощущают, что n-ная страница при выводе даётся тяжелее первой, и при этом не знаете, что с этим делать – статья для Вас. Но для начала, я хотел бы на пальцах объяснить, почему ОНО работает медленно.

Кстати, тест происходит на виртуальной машинке, работаю я с СУБД под рутом, версия MySQL – 5.0.32.
Читать дальше →
Всего голосов 139: ↑135 и ↓4+131
Комментарии81

Вклад авторов