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

4.68
Рейтинг
MySQL *
Свободная реляционная СУБД
Сначала показывать
Порог рейтинга
Уровень сложности
Подсчёт общего количества строк выборке в mySQL при использовании LIMIT
5 мин
65KОдин хороший человек хочет попасть на хабр. Для подтверждения своих благих намерений он написал статью, которую я привожу вам.
Наверняка многие знают о существовании в mySQL функции FOUND_ROWS(). Её чаще всего используют для подсчета общего числа строк в таблице, удовлетворяющих заданным условиям. Используют её обычно совместно с директивой SQL_CALC_FOUND_ROWS следующим образом:
Результатом второго запроса будет общее количество строк в таблице «table», удовлетворяющих условию «column > 1» (а не только тех, что были возвращены первым запросом).
Следует учитывать некоторые особенности этой функции, когда используете её без директивы SQL_CALC_FOUND_ROWS, о чём добросовестно предупреждает документация mySQL: в этом случае она вернёт общее количество обработанных строк (не возвращённых!). Например:
Результатом, как и ожидается, будет «50». Но следующие запросы вернут не слишком ожидаемый результат:
Несмотря на то, что первый запрос вернёт 50 строк, результатом будет «100», т.к. mySQL пришлось просмотреть именно 100 строк.
Наверняка многие знают о существовании в mySQL функции FOUND_ROWS(). Её чаще всего используют для подсчета общего числа строк в таблице, удовлетворяющих заданным условиям. Используют её обычно совместно с директивой SQL_CALC_FOUND_ROWS следующим образом:
Mysql> SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE column > 1 LIMIT 0, 50;
Mysql> SELECT FOUND_ROWS();
Результатом второго запроса будет общее количество строк в таблице «table», удовлетворяющих условию «column > 1» (а не только тех, что были возвращены первым запросом).
Следует учитывать некоторые особенности этой функции, когда используете её без директивы SQL_CALC_FOUND_ROWS, о чём добросовестно предупреждает документация mySQL: в этом случае она вернёт общее количество обработанных строк (не возвращённых!). Например:
Mysql> SELECT * FROM table LIMIT 0, 50;
Mysql> SELECT FOUND_ROWS();
Результатом, как и ожидается, будет «50». Но следующие запросы вернут не слишком ожидаемый результат:
Mysql> SELECT * FROM table WHERE column > 1 LIMIT 50, 50;
Mysql> SELECT FOUND_ROWS();
Несмотря на то, что первый запрос вернёт 50 строк, результатом будет «100», т.к. mySQL пришлось просмотреть именно 100 строк.
+43
Денормализация БД. Зачем? Когда? Как?
6 мин
100Kденормализация — это зло, или просто надо уметь её готовить?
Денормализация- это не результат кривых рук. Это не недоделанная нормализация, это намеренное нарушение нормальных форм, для увеличения производительности.
Вопрос о денормализации у меня возникал не раз. Каждый раз, когда приходилось идти на сделку с совестью, нарушая принципы нормальных форм, оставалось ощущение неудовлетворённости, ложное осознание своей некомпетентности. Со временем, при работе в команде, обнаружилось, что это не только моя проблема. Настало время разобраться: денормализация — это зло, или просто надо уметь её готовить?
+31
Nested Sets + MySQL TRIGGER
7 мин
9.9KЗадача
Задача такая же как и в предыдущей статье, только применимо к MySQL.
Грабли
Хорошая новость ребята! В MySQL нет проблемы с рекурсивными триггерами! Разработчики MySQL просто тупо лочат изменяемую таблицу даже на уровне триггера, вот редиски. Но, собственно, нас может остановить только отключение электричества.
Есть небольшая лазейка, с… объединенными таблицами. Хотя я не нашел в документации подтверждения того, что это так специально было задумано, но и отрицания тоже не было. Правда есть вероятность того, что эту лазейку могут прикрыть, хотя я не вижу в этом смысла.
Увы, механизм триггеров в MySQL новый и довольно сырой, что накладывает некоторые ограничения на его использование, но все же его достаточно для решения нашей задачи.
+29
Средства создания горячих BackUp`ов MySQL
3 мин
33KДоброго времени суток. Недавно я задался вопросом о том, как делать горячие BackUp`ы MySQL-серверов — ниже компиляция из прочитанного. Заранее хочу сказать, что данный пост является скорее большой заметкой, чем полноценной статьёй. Я намеренно уклоняюсь от описания синтаксиса — на эту тему уже немало написано — я же ставил перед собой другую цель — составить краткий обзор основных методов с характерными особенностями:
+49
Определяем порядок столбцов в составном индексе
5 мин
23KПеревод
Хочу поделиться простым эмпирическим методом, который я использую для определения того, в каком порядке должны идти столбцы в составном индексе. Этот способ подходит не только для MySQL, он также применим к любым СУБД, в которых используются b-tree индексы.
Давайте начнем с запроса, который возвращает пустой результат, но при этом делает полный скан таблицы. EXPLAIN покажет на нем, что нет доступных индексов (т.е. possible_keys = NULL)
Давайте начнем с запроса, который возвращает пустой результат, но при этом делает полный скан таблицы. 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;
+42
MySQL переделают в стиле Dizzle?
1 мин
1KНа Хабре прошла незамеченной интересная новость о том, что Монти Вайдениус, которого называют «отцом MySQL», а также Пётр Зайцев (основатель компании Percona) объявили о создании общественной организации Open Database Alliance, под крышей которой предлагается объединить все проекты, связанные с MySQL. По мнению основателей организации, будущее MySQL выглядит неопределённо в свете покупки Sun компанией Oracle. Новый альянс должен стать центром разработки MySQL и главным хабом по превращению этой СУБД в поистине открытую и прозрачную систему.
В данной ситуации речь идёт даже о том, чтобы переделать MySQL в стиле Dizzle. Говорят, что этот проект начался ещё в январе 2009 года в стенах Sun, а теперь Вайдениус/Зайцев с помощью сообщества могут продолжить его уже независимо от нового владельца MySQL.
via PRWeb, slashdot
В данной ситуации речь идёт даже о том, чтобы переделать MySQL в стиле Dizzle. Говорят, что этот проект начался ещё в январе 2009 года в стенах Sun, а теперь Вайдениус/Зайцев с помощью сообщества могут продолжить его уже независимо от нового владельца MySQL.
via PRWeb, slashdot
+5
Почему Ларри Эллисон так стремился купить MySQL?
1 мин
1.5KКогда Ларри Эллисон, директор 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
Теперь же мечта Эллисона сбылась, и он даже не говорит, что купил Sun только ради MySQL.
В свете всех известных фактов очень странно смотрятся размышления некоторых аналитиков о том, что MySQL не является конкурентом Oracle. Это слишком узкий взгляд на вещи, потому что не принимаются в расчёт долговременные планы Эллисона, а также перспективы развития самой MySQL (например, в версии 5.4 этой СУБД уже появилась поддержка 16-процессорных серверов x86, а по некоторым тестам производительность выросла на 40000%).
Кстати, по странной случайности выход MySQL 5.4 был запланирован на 21 апреля, но за день до этого произошла сделка с Oracle.
via betanews
+39
Основы репликации в MySQL
10 мин
333KС репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
+68
Импорт новостей из одного формата в WordPress
1 мин
807Я подумал, что здесь наверняка мне помогут решить мою задачу. Я пользовался на сайте движком php+mysql Virtuanews (virtuanews.co.uk), сейчас уже поддержка этого движка закрыта и домен не работает. Так вот, я решил поменять движок на сайте, на WordPress 2.7.1 (Lecactus Edition) и ищу у Вас помощи, сконвертировать базу mysql, в формат WordPress, чтобы импортировать посты. Как делать импорт-экспорт я знаю, а как базу (ту её часть, в которой содержаться топики и заголовки) сконвертировать или сделать ещё какие нибудь шаманские действия для того, чтобы все новости появились в WordPrese? Если кто нибудь знает — подскажите пожалуйста! Базу, которую нужно привести к формату WordPress я выложил на Народ narod.ru/disk/7405716000/db_backup_05-04-2009.sql.html (она весит около 11 мегабайт). Заранее спасибо за помощь!
-8
Ускоряем выборку произвольных записей MySQL
3 мин
33KПоследнее время оживилась публика с вопросом случайной выборки из таблицы. Решений по оптимизации полно, и нового сейчас я вам наверное ничего не покажу, просто напомню про основные методы оптимизации — упрощение запроса и индексацию. Без предисловий про фриленсеров, сразу к делу ;)
+41
Хранимые процедуры в MySQL
2 мин
27KПо долгу службы приходится глубоко разбираться с сабжем.
К сожалению, это не самое лучшее изобретение человечества, поэтому иногда приходится вбивать костыли, чтобы хоть как-то пользоваться этой штукой.
К сожалению, это не самое лучшее изобретение человечества, поэтому иногда приходится вбивать костыли, чтобы хоть как-то пользоваться этой штукой.
+33
Расчет периодов стажа в MySQL
3 мин
7.5KНа одном форуме задали вопрос о том, как правильно посчитать разность дат в MySQL для учета стажа сотрудника. На первый взгляд вопрос оказался простым, но при детальном рассмотрении все оказалось куда интереснее.
+25
Ближайшие события
Выборка произвольных записей в MySQL
4 мин
108KЕсть вроде бы обычные задачи, которые можно решить сразу и не задумываясь, но при интенсивном использовании таких решений возникают проблемы, причем не маленькие. Об одной из таких задач я и хочу рассказать.
+12
MySQL: Хранимые процедуры и динамический SQL
1 мин
51KЕсли кто-либо из вас пытался сделать вроде бы очевидную вещь, а именно, создать sql запрос внутри процедуры передав ей имя таблицы, пользователя и т.п., то скорее всего натыкались на ошибку, о том, что нельзя использовать динамический sql.
Такая конструкция работать не будет. А что же делать, чтобы она заработала?
SET @mytable='users';
SELECT * FROM @mytable;
Такая конструкция работать не будет. А что же делать, чтобы она заработала?
+61
Marten Mickos увольняется из Sun Microsystems
1 мин
1.1KMarten Mickos (Мартен Микос?), занимавший пост исполнительного директора MySQL AB до того, как Sun купила компанию, увольняется. После поглощения MySQL AB, Мартен занял пост вице-президента по направлению «базы данных» (senior vice president of Sun Microsystems' database group).
+5
Особенность оптимизатора MySQL 5.1.30 порядок следования таблиц в UPDATE
1 мин
989Добрый день. Я расскажу об одной из забавных особенностей оптимизатора MySQL 5.1.30, которая заставляет перед обновлением внимательно проверить запросы.
Для любопытных: «теперь SET-выражения выполняются не в порядке следования выражений слева направо, а в порядке следования обновляемых таблиц».
Для любопытных: «теперь SET-выражения выполняются не в порядке следования выражений слева направо, а в порядке следования обновляемых таблиц».
+41
Восстановление базы MySQL из бинарных логов
2 мин
44KБазы данных иногда пропадают. Человеческий фактор и всё-такое… Если вы не делали бекапов (а надо бы) или они уже устарели, не отчаивайтесь, — есть ещё возможность восстановить утерянную информацию.

+55
Кто победит — слон или кит? Совместная встреча московских групп пользователей MySQL и PostgreSQL.
2 мин
1.7KPostgreSQL и MySQL — две самых распространенных системы управления базами данных в интернете.

MySQL используется в таких высоконагруженных проектах как Wikipedia, facebook, flickr, Digg, YouTube, на хабрахабре и практически на всех сайтах, работающих под управлением Drupal и Wordpress.
Не уступает и Postgres — без него не работал бы Skype, его используют популярные в Америке социальные сети myyearbook.com и hi5.com, не работали бы без него и наши отечественные Мой Круг, smotri.com и Мир Тесен.
Свежие версии Друпала декларируют поддержку PostgreSQL, а вместо Wordpress можно использовать Movable Type. Из других любопытных приложений, использующих Postgres можно вспомнить 1С: Предприятие 8 и некоторые другие корпоративные информационные системы.
Какая же СУБД лучше? Для каких задач? Как одни и те же задачи решают в разных средах?
22 января 2009 года в Москве при поддержке клуба «Бизнес в стиле .RU» состоится уникальное событие — cовместная встреча московских групп пользователей MySQL и PostgreSQL.
Две команды экспертов (хакеры-разработчики каждой из систем, ведущие технические специалисты крупных проектов) опишут достоинства и недостатки обеих систем и ответят на вопросы гостей.
Предварительный состав участников встречи:
Встреча пройдет в здании Государственного университета — Высшей школы экономики на Покровском бульваре, дом 11 (станции метро Курская/Чкаловская или Китай-город), в аудитории В-201. Вход — со стороны Покровского бульвара, через корпус Е.
Начало — в 19-00.
Для участия во встрече необходимо пройти предварительную регистрацию: reg.styleru.net/registration/pgsqlvsmysql
Итак!
1. Регистрируемся.
2. Приходим к 19-00 на главный вход.
3. Показываем документ (паспорт, водительское удостоверение, студенческий билет, что угодно, где есть ваше имя и фамилия).
4. Проходим по указателям до аудитории В-201 и общаемся с докладчиками!

MySQL используется в таких высоконагруженных проектах как Wikipedia, facebook, flickr, Digg, YouTube, на хабрахабре и практически на всех сайтах, работающих под управлением Drupal и Wordpress.
Не уступает и Postgres — без него не работал бы Skype, его используют популярные в Америке социальные сети myyearbook.com и hi5.com, не работали бы без него и наши отечественные Мой Круг, smotri.com и Мир Тесен.
Свежие версии Друпала декларируют поддержку PostgreSQL, а вместо Wordpress можно использовать Movable Type. Из других любопытных приложений, использующих Postgres можно вспомнить 1С: Предприятие 8 и некоторые другие корпоративные информационные системы.
Какая же СУБД лучше? Для каких задач? Как одни и те же задачи решают в разных средах?
22 января 2009 года в Москве при поддержке клуба «Бизнес в стиле .RU» состоится уникальное событие — cовместная встреча московских групп пользователей MySQL и PostgreSQL.
Две команды экспертов (хакеры-разработчики каждой из систем, ведущие технические специалисты крупных проектов) опишут достоинства и недостатки обеих систем и ответят на вопросы гостей.
Предварительный состав участников встречи:
- Константин Осипов, Sun/MySQL
- Виктория Резниченко, Sun/MySQL
- Алексей Рыбак, Badoo.com
- Фёдор Сигаев, PostgreSQL Global Development Group
- Олег Бартунов, PostgreSQL Global Development Group
- Андрей Смирнов, NetStream
Встреча пройдет в здании Государственного университета — Высшей школы экономики на Покровском бульваре, дом 11 (станции метро Курская/Чкаловская или Китай-город), в аудитории В-201. Вход — со стороны Покровского бульвара, через корпус Е.
Начало — в 19-00.
Для участия во встрече необходимо пройти предварительную регистрацию: reg.styleru.net/registration/pgsqlvsmysql
Итак!
1. Регистрируемся.
2. Приходим к 19-00 на главный вход.
3. Показываем документ (паспорт, водительское удостоверение, студенческий билет, что угодно, где есть ваше имя и фамилия).
4. Проходим по указателям до аудитории В-201 и общаемся с докладчиками!
+21
Через год
1 мин
1.1KМожет это и правильно, но как-то неожиданно.
UPD По результатам обсуждения резюмирую:
а) это стандартное поведение и других СУБД и более того
б) данный способ расчета годового периода узаконен и применяется в офлайн.
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 По результатам обсуждения резюмирую:
а) это стандартное поведение и других СУБД и более того
б) данный способ расчета годового периода узаконен и применяется в офлайн.
+49
Вклад авторов
alizar 732.0maghamed 424.0snevsky 400.0olegbunin 346.2moscas 269.0tuta_larson 263.0youROCK 241.0zabivator 206.0mcshadow 197.0rdruzyagin 179.4