Моят личен и професионален живот

2020-05-23

Честит 25-ти Рожден Ден MySQL!

Днес, 23-ти Май 2020 г., MySQL навършва 25 години. За първи път се запознах с него по време на университетските ми години докато търсех безплатна и отворена релационна СУБД, за да уча и експериментирам с SQL. И го използвам от тогава. Така следвах развитието на "Най-популярната база данни с отворен код в света" през последните около 20 години от версии 3.2x насам. Годишнината е голяма. И така, какво означава MySQL за мен?
  • Първо и най-важно, MySQL е релационната (и не само) база от данни която избирам за личните ми и професионални проекти. За мен е лесно да измислям нови схеми на бази от данни в термините на MySQL и проектирам нови системи върху MySQL като система за бази от данни;
  • MySQL става все по-добър и по-добър с годините, което задържа интереса ми. Все още помня пристигането на:
    • 4.0 (със поддръжка на обединения, т.н.),
    • после 4.1 (подзаявки и подготвени изрази, т.н.),
    • после 5.0 (съхранени процедури, спусъци и изгледи, разпределени транзакции, т.н.),
    • после 5.1 (разделяне на таблица на дялове, XML и планировчик на събития, т.н),
    • после 5.5 (SIGNAL и RESIGNAL, PERFORMANCE_SCHEMA),
    • после 5.6 (пълнотекстово търсене за InnoDB, т.н.),
    • после 5.7 (JSON, именувани тригери, създавани колони, подсказки за оптимизатор, т.н.),
    • и по-скоро 8.0 (CTEs, прозоречни функции, подобрения по регулярни изрази, функция GROUPING, склад за документи, CHECK ограничения, LATERAL, функционални части на ключове и изрази по подразбиране и още много, много повече);
  • Изграждам MySQL сървър (и други продукти) за Slackware Linux от 2005 г., защото първоначално имах нужда от по-нови версии от предоставяните от официалното хранилище, а след това, защото Slackware превключи към MariaDB през 2013 г., но аз избрах да остана с MySQL. Това не значи, че не ползвам MariaDB въобще и в някои отношения вярвам, че е напред;
  • Докладвам бъгове на MySQL и свързани продукти, за да получа решение на проблемите (виж историята на някои от моите бъг доклади);
  • Пиша за MySQL през последните 2 години от излизането на MySQL 8.0, което ми помага да се запозная с новите възможности;
  • Също така представям MySQL от време на време, което ми помага да взаимодействам в обществото, да се уча и обменям идеи с по-опитните от мен;
  • Накрая, но определено не на последно място, има страхотно и много силно общество около MySQL, с което имах шанса да взаимодействам повече в последните 3 години. Това е което прави MySQL проекта силен толкова много години.
Казано просто MySQL е много повече от база данни за мен. MySQL беше с мен през значителна част от живота ми до сега и ме прави щастлив да виждам как базата продължава да се развива. Продължавам да смятам, че по-добрата поддръжка на SQL стандарта и новите възможности за разработчици трябваше да пристигнат по-рано, но по-добре късно отколкото никога. Също така разработката може да бъде по-отворена, но съм уверен, че бъдещето е отворено и светло.

За следващите 25 години и по-нататък! Честит рожден ден MySQL! Наздраве на всички, които използват и обичат MySQL!

    2020-05-03

    Излезе MySQL 8.0.20

    В Понеделник (27-ми Април) Oracle пусна MySQL 8.0.20 сървър и свързани продукти. Можете да проверите бележките към версията и официалната публикация. Фокусът на тази версия е компресия на транзакция в двоичен лог за спестяване на дисково пространство и мрежов трафик, така че няма много нови неща за разработчици. Все пак ето нещата, които забелязах в гореспоменатите ресурси.
    • Нови подсказки на оптимизатора на ниво индекс за съществуващи индекс подсказки (обърнете внимание на разликата!), които включват следните:
      • GROUP_INDEX/NO_GROUP_INDEX като равнозначещи на FORCE INDEX FOR GROUP BY/IGNORE INDEX FOR GROUP BY индекс подсказки;
      • INDEX/NO_INDEX като равнозначещи на FORCE INDEX/IGNORE INDEX индекс подсказки;
      • JOIN_INDEX/NO_JOIN_INDEX като равнозначещи на FORCE INDEX FOR JOIN/IGNORE INDEX FOR JOIN индекс подсказки;
      • ORDER_INDEX/NO_ORDER_INDEX като равнозначещи на FORCE INDEX FOR ORDER BY/IGNORE INDEX FOR ORDER BY индекс подсказки;
    • Оптимизацията хеш съединение вече поддържа също външно, анти и полу типове съединения, която значи, че за да работи хеш съединението вече не е нужно да има поне едно условие за равенство.
    • Има няколко подобрения по EXPLAIN израза:
      • с FORMAT=TREE включва нова inversion информация за прозоречни функции. За съжаление не намерих повече информация за това;
      • с FORMAT=TREE предоставя повече информация за оценени прозоречни функции съвпадаща с тази за обикновени съвкупности. Вече ще виждате редове "Window aggregate with buffering";
      • за ANALYZE вече има възможността за спиране на изпълнението с KILL QUERY или CTRL+C клавишна комбинация на команден ред;
      • ANALYZE вече трябва да поддържа FORMAT параметър с единствено възможна стойност TREE както е отразено в бележките към версията и наръчника, но за мен това предизвиква грешка.

        mysql> EXPLAIN ANALYZE FORMAT=TREE SELECT 1+1;
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FORMAT=TREE SELECT 1+1' at line 1


        Както и да е, надявам се това е първата стъпка в изпълнението на поддръжка за тази команда в Workbench в бъдеще (виж бъг 97282).
    Има няколко оттегляния, които включват:
    Няма промени в MySQL 8.0.20 Workbench, но все пак има нова версия и бележки към нея.

    В очакване на следващата версия можете да обновите кода си, за да избегнете изненади от премахнати преди това оттеглени функционалности.