Выводы из rsdn.ru::
1) при разработке приложений под MySQL нужно думать о том, как обойти эту проблему с ORDER BY, вплоть до выгрузки результата в таблицу (на деле временную) с индексом по атрибуту сортировки.
2) иначе — на единицах гигабайт базы и сотнях пользователей — крах за крахом.
3) обязательны “узкие композиты” при использовании таблиц с BLOBами, нужно добиваться того, чтобы EXPLAIN SELECT показывал Using index — т.е. полное неприкосновение к самой таблице с полным исполнением запроса по композиту.
4) возможно, имеет смысл на коленке сделанный table partitioning.
Самый частый запрос к базе в моем приложении имел вид:
SELECT * FROM t WHERE fk=12345 ORDER BY issued_at DESC LIMIT 1;
В базе был индекс по (fk, issued_at DESC). Посмотрел EXPLAIN - вижу, что для описанной в статье “страшной” сортировки извлекаются все записи, соответствующие fk. Непорядок.
Пересмотрел доку по индексам. Во-первых, MySQL игнорирует модификатор DESC при создании составных индексов. Ладно, сможем соорудить искусственное поле с обратным порядком нумерации. Пробуем пока тот же запрос, но без DESC в ORDER BY. Хрен там, опять rows = 58, а не 1!
В итоге похоже, буду заменять эти запросы на SELECT * FROM t WHERE fk=12345 AND issued_at=(SELECT MAX(issued_at FROM t WHERE fk=12345) AS foo; Согласно EXPLAIN, с таким запросом все шоколадно. Надо будет только сгенерить базу побольше для приближенного к реальности теста.
Фигня, а не статья: “у MySQL есть два движка — MyISAM и InnoDB, MySQL гавно, потому что у MyISAM гавно”.
У MySQL не два движка. Их несколько, у нас на тестовом “SHOW ENGINES” показывает: MyISAM, MRG_MYISAM, CSV, FEDERATED, MEMORY, InnoDB, ARCHIVE. Помимо этого я могу навскидку вспомнить Memcache, Falcon, Partition.
Каждый движок под свою задачу. Глупо говорить “движок — гавно” при попытке использовать его для того, что он не предназначен.
Совсем неплох. Жаль только, что некоторые хорошие фичи MySQL (FULLTEXT, SPATIAL index) доступны в MyISAM, посмотрим что преподнесёт нам Falcon (в MySQL 5.2, 6.xx)
Выводы из rsdn.ru::
1) при разработке приложений под MySQL нужно думать о том, как обойти эту проблему с ORDER BY, вплоть до выгрузки результата в таблицу (на деле временную) с индексом по атрибуту сортировки.
2) иначе — на единицах гигабайт базы и сотнях пользователей — крах за крахом.
3) обязательны “узкие композиты” при использовании таблиц с BLOBами, нужно добиваться того, чтобы EXPLAIN SELECT показывал Using index — т.е. полное неприкосновение к самой таблице с полным исполнением запроса по композиту.
4) возможно, имеет смысл на коленке сделанный table partitioning.
Самый частый запрос к базе в моем приложении имел вид:
SELECT * FROM t WHERE fk=12345 ORDER BY issued_at DESC LIMIT 1;
В базе был индекс по (fk, issued_at DESC). Посмотрел EXPLAIN - вижу, что для описанной в статье “страшной” сортировки извлекаются все записи, соответствующие fk. Непорядок.
Пересмотрел доку по индексам. Во-первых, MySQL игнорирует модификатор DESC при создании составных индексов. Ладно, сможем соорудить искусственное поле с обратным порядком нумерации. Пробуем пока тот же запрос, но без DESC в ORDER BY. Хрен там, опять rows = 58, а не 1!
В итоге похоже, буду заменять эти запросы на SELECT * FROM t WHERE fk=12345 AND issued_at=(SELECT MAX(issued_at FROM t WHERE fk=12345) AS foo; Согласно EXPLAIN, с таким запросом все шоколадно. Надо будет только сгенерить базу побольше для приближенного к реальности теста.
Фигня, а не статья: “у MySQL есть два движка — MyISAM и InnoDB, MySQL гавно, потому что у MyISAM гавно”.
У MySQL не два движка. Их несколько, у нас на тестовом “SHOW ENGINES” показывает: MyISAM, MRG_MYISAM, CSV, FEDERATED, MEMORY, InnoDB, ARCHIVE. Помимо этого я могу навскидку вспомнить Memcache, Falcon, Partition.
Каждый движок под свою задачу. Глупо говорить “движок — гавно” при попытке использовать его для того, что он не предназначен.
Кстати, для backup у MySQL есть mysqlhotdump
Я что то тоже не понял, чем же в итоге плох mysql?
Просто автору почему-то показалось, что MySQL=MyISAM
В итоге MySQL не так уж и плох?
Совсем неплох. Жаль только, что некоторые хорошие фичи MySQL (FULLTEXT, SPATIAL index) доступны в MyISAM, посмотрим что преподнесёт нам Falcon (в MySQL 5.2, 6.xx)