All Products
Search
Document Center

Lindorm:Fungsi JSON

Last Updated:Aug 28, 2026

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

Mengekstraksi nilai dari dokumen JSON pada path yang ditentukan.

json_extract_string

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi string.

json_extract_long

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi bilangan bulat panjang (long integer).

json_extract_double

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi bilangan titik mengambang.

Fungsi pemeriksaan keterkandungan 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 field baru jika field tersebut belum ada.

json_replace

Mengganti data yang sudah ada dalam dokumen JSON dan mengembalikan dokumen baru. Fungsi ini hanya memperbarui nilai jika field 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}

-- Gunakan 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"]

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

Fungsi ekstraksi JSON

json_extract

Mengekstraksi 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:

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

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

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

-- Ekstraksi 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 berbasis tipe: json_extract_type

json_extract_string

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi 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

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi 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

Mengekstraksi nilai pada path yang ditentukan dan mengonversinya menjadi 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 bersifat strongly typed. Elemen pada path yang ditentukan harus secara ketat 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 mendefinisikan tipe data sebelum menyisipkan data JSON karena tipe campuran dapat menyebabkan masalah logika yang tidak terduga.

Fungsi pemeriksaan keterkandungan 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 keberadaannya.

  • 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-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 rows in set (0.01 sec)

-- 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 row in set (0.01 sec)

-- Berisi "Java" dan "Go"
mysql>  SELECT id, data FROM test_table WHERE json_contains(data, '["Java","Go"]', '$.skills') and id>0 and id<10;
Empty set (0.02 sec)

-- 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 rows in set (0.01 sec)

-- 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 row in set (0.01 sec)

-- 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 keterkandungan 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 keterkandungan JSON.

Contoh:

mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]');
+--------+
| EXPR$0 |
+--------+
|      0 |
+--------+
1 row in set (0.02 sec)

mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]','$.skills');
+--------+
| EXPR$0 |
+--------+
|      1 |
+--------+
1 row in set (0.03 sec)

-- 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 rows in set (0.01 sec)

-- 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 rows in set (0.01 sec)

-- 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 field 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 field baru
UPDATE test_table SET data = json_set(data, '$.department', 'Engineering') WHERE id = 3;
-- Hasil: {"name": "Charlie", "age": 31, "department": "Engineering"}

-- Ketika 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-apa.

Contoh:

-- Menyisipkan field 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 field yang sudah ada (tidak berpengaruh)
UPDATE test_table SET data = json_insert(data, '$.name', 'New Name') WHERE id = 5;
-- Hasil: {"name": "Eve", "age": 28} (Field 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-apa.

Contoh:

-- Memperbarui field 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 field 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 field 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 field
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 field 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 secara semantik 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:

-- Ketika 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 field 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 field 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 keterkandungan JSON

Fungsi

Perbedaan

json_contains

Untuk json_contains, setiap elemen dalam candidate_json juga harus merupakan 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 merupakan 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

Field ada

Field 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 field baru.

json_replace

Tetap NULL

Perbarui

Tidak ada operasi

Hanya memperbarui field yang sudah ada.

json_remove

Tetap NULL

Hapus

Tidak ada operasi

Menghapus field.

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

Mengekstraksi field 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 mengekstraksi 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 Gunakan 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 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 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

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