Відчуваємо нові json можливості в mysql 5

MySQL 5.7 отримав новий нативний тип даних JSON і набір SQL функцій для роботи з ним. Сьогодні ми продемонструємо кілька простих прикладів цих можливостей з испльзование даних SF OpenData.

Не пропустіть ще одну статтю по цій темі - Використання JSON в MySQL.

імпортуємо дані

Важливо використовувати якісні тестові дані, тому що так простіше перевіряти точні результати запитів. Також вони мають хорошу структуру, що важливо при додаванні індексів.

Обраний нами набір даних з SF OpenData містить близько 200 тисяч позицій. Спочатку скачати їх і імпортуємо в базу.

Кожен документ має такий вигляд і вдає із себе ділянку землі, обмежений точками:

У нашому випадку все 200 тисяч документів мають один формат, але це необов'язково, так як JSON в MySQL - schema-less.

приклади запитів

Запит 1: Знайдемо ділянку землі, яку він обіймав вулицею з назвою "Market"

За допомогою оператора-скорочення для JSON_EXTRACT (->) ми можемо робити запити до JSON стовпцями зручним способом. Синтаксис "$ .properties.STREET" чимось схожий на CSS селектори, які використовуються в jQuery. Дізнатися більше про синтаксис JSON запитів можна з документації

Запит 2: Знайдемо всі ділянки землі, де не вказано вулиця:

Так як JSON в MySQL - schemaless, він знаходить всі документи, що не мають необхідної структури. У цьому прикладі ми бачимо що у всіх документів визначено властивість $ .properties.STREET, тому запит повертає нульовий результат.

Порівняння типів JSON і TEXT

У цьому прикладі ми виконаємо запит, який обробить всі 200 тисяч JSON документів. Це буде щось на зразок невеликого тесту продуктивності, але без використання індексів.

Що ми тут зробили:

  • Для спрощення ми переконалися що в обох прикладах дані містяться в пам'яті.
  • Фуркціі для роботи з JSON, включаючи алиас (->) для json_extract () працюють однаково як для JSON типу даних, так і для TEXT / BLOB / VARCHAR типів. Це дуже корисно для користувачів хто тільки оновився до MySQL 5.7, але вже зберігає дані в JSON.
  • Ми бачимо що JSON тип приблизно в 10 разів швидше ніж TEXT тип - 1.25 секунд проти 12.85. Це пояснюється тим, що нативний тип JSON не вимагає ніякого розбору або перевірки даних, і можна ефективно будувати запити до JSON документам.

Підтримку JSON документів вже додали в query builder Laravel'а. І в майбутньому підтримка швидше за все з'явиться і в інших фреймворків.

Якщо не знайшли відповідей на свої питання можете подивитися в іншій статті - Використання JSON в MySQL.

Схожі статті