全部产品
Search
文档中心

Lindorm:Fungsi JSON

更新时间:Dec 16, 2025

Dokumen ini menjelaskan penggunaan, parameter, dan contoh semua fungsi JSON dalam Lindorm SQL.

Ikhtisar fungsi JSON

Klasifikasi fungsi

Nama fungsi

Deskripsi fungsi

Fungsi konstruktor JSON

json_object

Membuat objek JSON.

json_array

Membuat array JSON.

Fungsi ekstraksi JSON

json_extract

Mengekstrak nilai dari dokumen JSON pada path yang ditentukan.

json_extract_string

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke string.

json_extract_long

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan bulat panjang (long integer).

json_extract_double

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan titik mengambang.

Fungsi pemeriksaan kandungan JSON

json_contains

Memeriksa apakah dokumen JSON berisi semua nilai atau objek yang ditentukan.

json_contains_any

Memeriksa apakah dokumen JSON berisi salah satu dari nilai atau objek yang ditentukan.

Fungsi pembaruan JSON

json_set

Menyisipkan atau memperbarui data dalam dokumen JSON dan mengembalikan dokumen baru. Ini setara dengan json_insert + json_replace.

json_insert

Menyisipkan data ke dalam dokumen JSON dan mengembalikan dokumen baru. Fungsi ini hanya menyisipkan bidang baru jika bidang tersebut belum ada.

json_replace

Mengganti data yang sudah ada dalam dokumen JSON dan mengembalikan dokumen baru. Fungsi ini hanya memperbarui nilai jika bidang tersebut sudah ada.

json_remove

Menghapus data dari dokumen JSON pada path yang ditentukan dan mengembalikan dokumen yang telah dimodifikasi.

json_upsert

Semantiknya sama dengan json_set, tetapi dapat menangani nilai NULL.

Deskripsi fungsi

Fungsi konstruktor JSON

json_object

Membuat objek JSON.

Sintaks:

json_object(key1, value1, key2, value2, ...)

Parameter:

  • key: Nama kunci. Harus berupa string.

  • value: Nilai. Dapat bertipe apa saja.

Contoh:

-- Membuat objek sederhana
SELECT json_object('name', 'Alice', 'age', 25);
-- Hasil: {"name": "Alice", "age": 25}

-- Digunakan dalam pernyataan INSERT
UPSERT INTO users (id, data) VALUES (1, json_object('name', 'Charlie', 'city', 'Beijing'));

json_array

Membuat array JSON.

Sintaks:

json_array(value1, value2, value3, ...)

Parameter:

  • value: Nilai. Dapat berupa skalar, objek, atau array.

Contoh:

-- Membuat array sederhana
SELECT json_array('apple', 'banana', 'orange');
-- Hasil: ["apple", "banana", "orange"]

-- Digunakan dalam pernyataan INSERT
UPSERT INTO products (id, tags) VALUES (1, json_array('electronics', 'mobile', 'smartphone'));

Fungsi ekstraksi JSON

json_extract

Mengekstrak nilai dari dokumen JSON pada path yang ditentukan.

Sintaks:

json_extract(json_column, 'path')

Parameter:

  • json_column: Kolom atau ekspresi bertipe JSON.

  • path: Ekspresi path JSON, seperti $.field, $.array[0], atau $.nested.field.

Contoh:

-- Mengekstrak bidang sederhana
SELECT json_extract('{"name": "Alice", "age": 25}', '$.name');
-- Hasil: "Alice"

-- Mengekstrak bidang bersarang
SELECT json_extract('{"user": {"name": "Bob", "age": 30}}', '$.user.name');
-- Hasil: "Bob"

-- Mengekstrak elemen array
SELECT json_extract('{"skills": ["Java", "Python"]}', '$.skills[0]');
-- Hasil: "Java"

-- Mengekstrak seluruh array
SELECT json_extract('{"skills": ["Java", "Python"]}', '$.skills');
-- Hasil: ["Java", "Python"]

-- Klausul WHERE dengan angka
select * from tb where json_extract(c2, '$.k3.k4') > 5;

-- Klausul WHERE dengan string
select * from tb where json_extract_string(c2, '$.k2') = '1';

Fungsi ekstraksi tipe aman: json_extract_type

json_extract_string

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke string. Jika nilai pada path tersebut bukan string, fungsi ini mengembalikan NULL secara default.

SELECT json_extract_string('{"name": "Alice"}', '$.name');
-- Hasil: Alice (tipe VARCHAR)

SELECT json_extract_string('{"number": "30"}', '$.name');
-- Hasil: NULL. (Tipenya Number, tidak sesuai.)

json_extract_long

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan bulat panjang (long integer). Jika nilai pada path tersebut bukan angka, Java Database Connectivity (JDBC) melemparkan error.

SELECT json_extract_long('{"id": 123456789}', '$.id');
-- Hasil: 123456789 (tipe LONG)

SELECT json_extract_long('{"id": 123456.789}', '$.id');
-- Melemparkan error

SELECT json_extract_long('{"id": "123456.789"}', '$.id');
-- Melemparkan error

json_extract_double

Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan titik mengambang. Jika nilai pada path tersebut bukan bilangan titik mengambang, JDBC melemparkan error.

SELECT json_extract_double('{"id": 12345.56}', '$.id');
-- Hasil: 12345.56 (tipe Double)

SELECT json_extract_double('{"id": 12345}', '$.id');
-- Hasil: 12345.0 (tipe Double)

SELECT json_extract_double('{"id": "123456.789"}', '$.id');
-- Melemparkan error

Ketiga fungsi ini bertipe kuat. Elemen pada path yang ditentukan harus benar-benar sesuai dengan tipe fungsi tersebut. Jika tidak, fungsi akan mengembalikan NULL atau melemparkan error. Anda dapat mengonfigurasi kluster untuk memaksa konversi tipe, tetapi hal ini tidak disarankan. Kami menyarankan agar Anda menentukan tipe data sebelum menyisipkan data JSON karena pencampuran tipe dapat menyebabkan masalah logika yang tidak terduga.

Fungsi pemeriksaan kandungan JSON

json_contains

Memeriksa apakah dokumen JSON berisi semua nilai atau objek yang ditentukan.

Sintaks:

json_contains(target, candidate[, path])

Parameter:

  • target_json: Wajib. Dokumen JSON.

  • candidate_json: Wajib. Dokumen JSON yang akan diperiksa.

  • path: Opsional. Ekspresi path.

Untuk informasi lebih lanjut tentang parameter, lihat Informasi parameter tambahan.

Nilai kembalian:

  • 1 (true): Nilai yang ditentukan ditemukan.

  • 0 (false): Target tidak berisi kandidat.

Fungsi json_contains mengembalikan 1 jika dokumen target_json berisi dokumen candidate_json, dan 0 jika tidak. Jika Anda menentukan parameter path, fungsi ini memeriksa apakah data pada path yang ditentukan berisi dokumen candidate_json.

Fungsi json_contains mengembalikan NULL dalam kasus berikut:

  • Path yang ditentukan tidak ada dalam dokumen JSON.

  • Salah satu parameter bernilai NULL.

Contoh:

-- Membuat tabel dan menyisipkan data
CREATE TABLE test_table (id INT, c1 VARCHAR, data JSON, PRIMARY KEY(id));
UPSERT INTO test_table (id, data) VALUES (1, NULL);
UPSERT INTO test_table (id, data) VALUES (2, '{"skills": ["Java", "Python"]}');
UPSERT INTO test_table (id, data) VALUES (3, '{"skills": ["Go", "C"]}');
UPSERT INTO test_table (id, data) VALUES (4, '{"technical_skills": ["Java", "Go", "Rust"]}');
UPSERT INTO test_table (id, data) VALUES (5, '["Java","C++", "JavaScript"]');
UPSERT INTO test_table (id, data) VALUES (6, '{"skills": "Java"}');
UPSERT INTO test_table (id, data) VALUES (7, '["Java", "C#"]');
UPSERT INTO test_table (id, data) VALUES (8, '{"skills": ["Go", "Rust"]}');
-- Bentuk dua parameter. Path default adalah '$'.
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]') and id>0 and id<10;
+------+------------------------------+
| id   | data                         |
+------+------------------------------+
|    5 | ["Java","C++", "JavaScript"] |
|    7 | ["Java", "C#"]               |
+------+------------------------------+
2 baris dalam set (0,01 detik)

-- Bentuk tiga parameter: Periksa path tertentu
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id   | data                           |
+------+--------------------------------+
|    2 | {"skills": ["Java", "Python"]} |
+------+--------------------------------+
1 baris dalam set (0,01 detik)

-- Berisi kedua "Java" dan "Go"
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '["Java","Go"]', '$.skills') and id>0 and id<10;
Set kosong (0,02 detik)

-- Array atau elemen berisi skalar "Java" 
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '"Java"', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id   | data                           |
+------+--------------------------------+
|    2 | {"skills": ["Java", "Python"]} |
|    6 | {"skills": "Java"}             |
+------+--------------------------------+
2 baris dalam set (0,01 detik)

-- Elemen array berisi array yang hanya memiliki skalar "Java". (Untuk id=6, dokumen JSON pada path tersebut adalah skalar. Subset dari skalar hanya bisa berupa skalar, bukan array.)
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id   | data                           |
+------+--------------------------------+
|    2 | {"skills": ["Java", "Python"]} |
+------+--------------------------------+
1 baris dalam set (0,01 detik)

-- Periksa apakah seluruh dokumen berisi objek
SELECT json_contains('{"a": 1, "b": 2}', '{"a": 1}');
-- Hasil: 1

-- Periksa apakah path tertentu berisi nilai
SELECT json_contains('{"a": 1, "b": 2}', '1', '$.a');
-- Hasil: 1

SELECT json_contains('{"a": 1, "b": 2}', '1', '$.b');
-- Hasil: 0

-- Periksa kandungan dalam array
SELECT json_contains('{"skills": ["Java", "Python"]}', '"Java"', '$.skills');
-- Hasil: 1

Informasi parameter tambahan

  1. candidate_json adalah dokumen JSON. Anda harus merepresentasikan elemen yang sesuai sebagai string JSON.

    • Dokumen JSON yang berisi angka 10: '10'

    • Dokumen JSON yang berisi string "10": '"10"'

    • Dokumen JSON yang berisi daftar angka: '[1,2,3]'

    • Dokumen JSON yang berisi daftar string: '["10","abc","key"]'

  2. Subset dari skalar hanya bisa berupa skalar. Subset dari array bisa berupa elemen atau array.

    Klasifikasi tipe JSON:

    • Skalar: String, Angka (Integer/Double), Boolean, Null

    • Tipe kompleks: Array, Objek

    Pertimbangkan kondisi pemeriksaan json_contains_any(skills, '["Java"]', '$.technical_skills'). Untuk JSON pada path $.technical_skills:

    • Jika nilainya {"technical_skills":"Java"}, fungsi mengembalikan false. Subset dari string tidak bisa berupa daftar.

    • Jika nilainya {"technical_skills":["Java"]} atau {"technical_skills":["Java","Go"]}, fungsi mengembalikan true.

    Pertimbangkan kondisi pemeriksaan json_contains_any(skills, '"Java"', '$.technical_skills') . Untuk JSON pada path $.technical_skills:

    • Jika nilainya {"technical_skills":"Java"}, fungsi mengembalikan true.

    • Jika nilainya {"technical_skills":["Java"]} atau {"technical_skills":["Java","Go"]}, fungsi mengembalikan true.

json_contains_any

Memeriksa apakah dokumen JSON berisi salah satu dari nilai atau objek yang ditentukan.

Sintaks:

Sintaksnya sama dengan json_contains. Untuk informasi lebih lanjut tentang perbedaannya, lihat Perbandingan fungsi pemeriksaan kandungan JSON.

Contoh:

mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]');
+--------+
| EXPR$0 |
+--------+
|      0 |
+--------+
1 baris dalam set (0,02 detik)

mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]','$.skills');
+--------+
| EXPR$0 |
+--------+
|      1 |
+--------+
1 baris dalam set (0,03 detik)

-- Bentuk default dua parameter. Path default adalah '$'.
mysql> SELECT id, data FROM test_table WHERE json_contains_any(data, '["Java", "Go"]') limit 10;
+------+------------------------------+
| id   | data                         |
+------+------------------------------+
|    5 | ["Java","C++", "JavaScript"] |
|    7 | ["Java", "C#"]               |
+------+------------------------------+
2 baris dalam set (0,01 detik)

-- Bentuk tiga parameter
mysql>  SELECT id, data FROM test_table WHERE json_contains_any(data, '["Java", "Go", "Rust"]', '$.skills') limit 10;
+------+--------------------------------+
| id   | data                           |
+------+--------------------------------+
|    2 | {"skills": ["Java", "Python"]} |
|    3 | {"skills": ["Go", "C"]}        |
|    6 | {"skills": "Java"}             |
|    8 | {"skills": ["Go", "Rust"]}     |
+------+--------------------------------+
4 baris dalam set (0,01 detik)

-- Periksa apakah berisi salah satu nilai dari array
SELECT json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]');
-- Hasil: 0
SELECT json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]','$.skills');
-- Hasil: 1

-- Periksa pada path tertentu
SELECT json_contains_any('{"departments": ["Engineering", "Sales"]}', '["Marketing", "Engineering"]', '$.departments');
-- Hasil: 1

Fungsi pembaruan JSON

json_set

Menyisipkan atau memperbarui data dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini setara dengan json_insert + json_replace.

Sintaks:

json_set(json_column, 'path', new_value)

Perilaku:

  • Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.

  • Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.

  • Jika kolom JSON bernilai NULL, hasilnya juga NULL. Tidak ada aksi yang dilakukan.

Contoh:

-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (3, '{"name": "Charlie", "age": 30}');
UPDATE test_table SET data = json_set(data, '$.age', 31) WHERE id = 3;
-- Hasil: {"name": "Charlie", "age": 31}

-- Menyisipkan bidang baru
UPDATE test_table SET data = json_set(data, '$.department', 'Engineering') WHERE id = 3;
-- Hasil: {"name": "Charlie", "age": 31, "department": "Engineering"}

-- Saat kolom JSON bernilai NULL (perbedaan utama dari json_upsert)
UPSERT INTO test_table (id,c1) VALUES (4,'test');
UPDATE test_table SET data = json_set(data, '$.name', 'David') WHERE id = 4;
-- Hasil: NULL

json_insert

Menyisipkan data ke dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini hanya menyisipkan nilai baru jika nilai tersebut belum ada pada path yang ditentukan.

Sintaks:

json_insert(json_column, 'path', new_value)

Perilaku:

  • Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.

  • Jika path yang ditentukan sudah ada, fungsi ini tidak melakukan apa pun.

Contoh:

-- Menyisipkan bidang baru
UPSERT INTO test_table (id, data) VALUES (5, '{"name": "Eve"}');
UPDATE test_table SET data = json_insert(data, '$.age', 28) WHERE id = 5;
-- Hasil: {"name": "Eve", "age": 28}

-- Mencoba menyisipkan bidang yang sudah ada (tidak berpengaruh)
UPDATE test_table SET data = json_insert(data, '$.name', 'New Name') WHERE id = 5;
-- Hasil: {"name": "Eve", "age": 28} (Bidang name tetap tidak berubah)

json_replace

Mengganti data yang sudah ada dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini hanya memperbarui nilai jika nilai tersebut sudah ada pada path yang ditentukan.

Sintaks:

json_replace(json_column, 'path', new_value)

Perilaku:

  • Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.

  • Jika path yang ditentukan tidak ada, fungsi ini tidak melakukan apa pun.

Contoh:

-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (6, '{"name": "Frank", "age": 35}');
UPDATE test_table SET data = json_replace(data, '$.age', 36) WHERE id = 6;
-- Hasil: {"name": "Frank", "age": 36}

-- Mencoba memperbarui bidang yang tidak ada (tidak berpengaruh)
UPDATE test_table SET data = json_replace(data, '$.city', 'Shanghai') WHERE id = 6;
-- Hasil: {"name": "Frank", "age": 36} (Tidak ada bidang city)

json_remove

Menghapus data dari dokumen JSON pada path yang ditentukan dan mengembalikan dokumen yang telah dimodifikasi.

Sintaks:

json_remove(json_column, 'path')

Perilaku:

  • Jika path yang ditentukan ada, fungsi ini menghapus data pada path tersebut.

  • Jika path yang ditentukan tidak ada, operasi ini aman dan tidak terjadi error.

Contoh:

-- Menghapus bidang
UPSERT INTO test_table (id, data) VALUES (7, '{"name": "Grace", "temp_field": "to_remove"}');
UPDATE test_table SET data = json_remove(data, '$.temp_field') WHERE id = 7;
-- Hasil: {"name": "Grace"}

-- Menghapus bidang yang tidak ada (aman)
UPDATE test_table SET data = json_remove(data, '$.nonexistent') WHERE id = 7;
-- Hasil: {"name": "Grace"} (Tidak ada error)

json_upsert

Fungsi ini semantiknya sama dengan json_set, tetapi dapat menangani nilai NULL.

Sintaks:

json_upsert(json_column, 'path', new_value)

Perilaku:

  • Jika kolom JSON bernilai NULL, fungsi ini membuat objek baru: {path: new_value}

  • Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.

  • Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.

Contoh:

-- Saat kolom JSON bernilai NULL
CREATE TABLE test_table (id INT, c1 VARCHAR, data JSON, PRIMARY KEY(id));
UPSERT INTO test_table (id,c1) VALUES (1,'test');
UPDATE test_table SET data = json_upsert(data, '$.name', 'Alice') WHERE id = 1;
-- Hasil: {"name": "Alice"}

-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (2, '{"name": "Bob", "age": 25}');
UPDATE test_table SET data = json_upsert(data, '$.age', 26) WHERE id = 2;
-- Hasil: {"name": "Bob", "age": 26}

-- Menyisipkan bidang baru
UPDATE test_table SET data = json_upsert(data, '$.city', 'Beijing') WHERE id = 2;
-- Hasil: {"name": "Bob", "age": 26, "city": "Beijing"}

Untuk informasi lebih lanjut tentang perbedaan antara fungsi pembaruan JSON ini, lihat Perbandingan fungsi pembaruan JSON.

Rangkuman perbandingan fungsi

Perbandingan fungsi pemeriksaan kandungan JSON

Fungsi

Perbedaan

json_contains

Untuk json_contains, setiap elemen dalam candidate_json juga harus menjadi elemen dalam target_json.

Dengan kata lain, candidate_json harus merupakan subset dari target_json.

json_contains_any

Untuk json_contains_any, setidaknya satu elemen dalam candidate_json juga harus menjadi elemen dalam target_json.

Dengan kata lain, candidate_json dan target_json harus memiliki setidaknya satu elemen yang sama.

Perbandingan fungsi pembaruan JSON

Fungsi

Penanganan kolom NULL

Bidang sudah ada

Bidang tidak ada

Kasus penggunaan utama

json_set

Tetap NULL

Perbarui

Sisipkan

Memperbarui kolom yang diketahui tidak NULL. (Sesuai dengan semantik MySQL).

json_upsert

Membuat objek baru

Perbarui

Sisipkan

Pembaruan tujuan umum. Menyisipkan bahkan jika kolom bernilai NULL.

json_insert

Tetap NULL

Tidak ada operasi

Sisipkan

Hanya menyisipkan bidang baru.

json_replace

Tetap NULL

Perbarui

Tidak ada operasi

Hanya memperbarui bidang yang sudah ada.

json_remove

Tetap NULL

Hapus

Tidak ada operasi

Menghapus bidang.

Dukungan indeks berbasis fungsi

Sintaks

create_index_statement ::=  CREATE INDEX [ index_name ]
                                ON table_name '(' index_identifier ')'
                              [INCLUDE include_identifier]
                              [ASYNC]
                                 [ index_options ]
index_identifier       ::=  '('json_extract_type(column, json_path)')'
include_identifier   ::= '('column_name1,...,column_namen ')'

Deskripsi parameter

Parameter

Deskripsi

index_name

Nama tabel indeks.

table_name

Nama tabel lebar.

json_extract_type

Mengekstrak bidang dengan tipe data tertentu dari kolom JSON untuk digunakan sebagai indeks sekunder. Jika tipe data tidak sesuai, indeks sekunder tidak dibuat. Jenis fungsi berikut didukung:

  • json_extract_string

  • json_extract_long

  • json_extract_double

column

Nama kolom JSON.

json_path

Path dalam kolom JSON. Digunakan untuk mengekstrak nilai pada path yang ditentukan.

ASYNC

Membangun indeks secara asinkron. Jika Anda tidak menambahkan ASYNC, indeks dibangun secara sinkron.

Untuk informasi lebih lanjut tentang dukungan indeks pencarian untuk fungsi JSON, lihat Menggunakan indeks pencarian untuk tipe JSON Lindorm.

Fungsi yang didukung

Fungsi JSON berikut mendukung pembuatan indeks berbasis fungsi:

Mempercepat kueri terkait json_extract dan json_extract_type

  • json_extract_string(json_column, 'path')

  • json_extract_long(json_column, 'path')

  • json_extract_double(json_column, 'path')

Lindorm wide table SQL memungkinkan Anda membuat indeks sekunder untuk data pada path tertentu dalam kolom bertipe JSON. Namun, saat membuat indeks sekunder, Anda harus menentukan tipe fungsi json_extract untuk kolom JSON tersebut.

Mempercepat kueri terkait json_contains

json_contains(json_column, 'value', 'path')

Saat ini, parameter value dan path harus berupa nilai tetap. Kondisi kueri harus statis.

Contoh pembuatan indeks

-- Membuat indeks untuk json_contains
CREATE INDEX idx_user_role ON test_table (json_contains(data, '"admin"', '$.roles')) INCLUDE(data) SYNC;

-- Membuat indeks untuk json_extract_string
CREATE INDEX idx_user_city ON test_table (json_extract_string(data, '$.address.city')) INCLUDE(data) SYNC;

-- Membuat indeks untuk json_extract_string tanpa menyertakan kolom
CREATE INDEX idx_user_city ON test_table (json_extract_string(data, '$.address.city'));

-- Membuat indeks untuk json_extract_long
CREATE INDEX idx_user_age ON test_table (json_extract_long(data, '$.age')) INCLUDE(data) SYNC;

-- Melihat hasil pembuatan indeks
SHOW INDEX FROM test_table;

Batasan

  • Selalu ikuti sintaks standar saat menggunakan JsonPath.

  • Perhatikan dampak performa dari operasi JSON yang kompleks.

  • Untuk path yang sering dikueri, Anda dapat membuat indeks untuk meningkatkan kecepatan respons kueri.

Penanganan error umum

  • Path JSON tidak valid

    Error illegal json path terjadi jika JsonPath bukan JsonPath yang valid. Untuk informasi lebih lanjut, lihat definisi JsonPath menurut MySQL.

  • Nilai JSON tidak valid

    json_contain candidate is not a valid value: Periksa bahwa parameter candidate adalah string JSON yang valid.

  • Peringatan pemindaian tabel penuh

    This query may be a full table scan and thus may have unpredictable performance: Peringatan ini menunjukkan adanya pemindaian tabel penuh yang tidak efisien. Anda dapat membuat indeks untuk mempercepat kueri atau menambahkan klausa `LIMIT` untuk memfilter subset data.

Rekomendasi

  1. Pilih fungsi pembaruan yang tepat

    Anda dapat memilih json_upsert atau json_set berdasarkan kebutuhan bisnis Anda.

  2. Perencanaan indeks

    Anda dapat membuat indeks berbasis fungsi untuk path JSON yang sering dikueri.

  3. Keamanan tipe

    Gunakan fungsi ekstraksi spesifik tipe untuk memastikan kebenaran tipe data. Hindari mencampur angka dan string numerik, karena dapat menyebabkan ambiguitas. Misalnya, hindari mencampur angka 10 dan string "10".