Jadual Kandungan
Pengenalan kepada Indeks Berbilang Nilai
Buat indeks berbilang nilai
Indeks Medan Objek JSON
Indeks objek tatasusunan JSON
Dibuat dalam indeks gabungan sintaks indeks berbilang nilai
Penghadan indeks berbilang nilai
Senario Aplikasi
Rumah pangkalan data tutorial mysql Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

Jun 01, 2023 pm 10:25 PM
mysql json

    Pengenalan kepada Indeks Berbilang Nilai

    Bermula daripada MySQL 8.0.17, InnoDB menyokong penciptaan indeks berbilang nilai ( Indeks Berbilang Nilai) , indeks ini ialah indeks kedua yang ditakrifkan pada lajur tatasusunan nilai storan JSON Terdapat beberapa rekod indeks untuk satu rekod data. Takrifan sintaks khusus untuk jenis indeks ini:

    CAST(ungkapan SEBAGAI jenis ARRAY), seperti CAST(data->'$.zipcode' AS UNSIGNED ARRAY). Seperti indeks biasa, ia juga boleh dilihat dalam EXPLAIN.

    Buat indeks berbilang nilai

    Seperti indeks lain, indeks berbilang nilai boleh ditambah semasa membuat jadual, atau dibuat melalui ALTER TABLE atau CREATE INDEX.

    Indeks Medan Objek JSON

    Sintaks

    ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$.key' AS UNSIGNED array ) ) );
    Salin selepas log masuk

    Nota: Terdapat dua lapisan kurungan tunggal di luar sintaks CAST di sini! , jika anda kurang menulis satu, ralat akan dilaporkan!

    Kes Ujian

    PS: Kes dalam artikel merujuk kepada kes dalam dokumen rasmi dan hanya digunakan sebagai ujian, jadi penamaan tidak begitu standard dan mesti ketat dalam proses pembangunan sebenar Ikuti spesifikasi pembangunan pasukan syarikat dan jangan malas!

    DROP TABLE IF EXISTS `customers`;
    /*建表语句*/
    CREATE TABLE customers ( 
    	id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    	modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    	custinfo JSON NOT NULL 
    );
    /*插入写测试数据*/
    INSERT INTO customers
    VALUES
    	( NULL, NOW(), '{"key":94582,"value":"asdf"}' ),
    	( NULL, NOW(), '{"key":94568,"value":"gjgasdasdf"}' ),
    	( NULL, NOW(), '{"key":94477,"value":"ghasdfsdf"}' ),
    	( NULL, NOW(), '{"key":94536,"value":"hagsdfgdf"}' ),
    	( NULL, NOW(), '{"key":94507,"value":"wasfgjdf"}' );
    /*添加多值索引*/
    ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$.key' AS UNSIGNED array)) );
    /*测试 MEMBER OF 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	94507 MEMBER OF ( custinfo -> '$.key' );
    /*测试 JSON_CONTAINS 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	JSON_CONTAINS(
    		custinfo -> '$.key',
    	CAST( '[94582]' AS JSON ));
    /*测试 JSON_OVERLAPS 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	JSON_OVERLAPS (
    		custinfo -> '$.key',
    	CAST( '[94477]' AS JSON ));
    Salin selepas log masuk

    Lihat pelan pelaksanaan dan ketahui bahawa indeks boleh digunakan:

    Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

    Jika anda perlu mencipta indeks berbilang nilai untuk jenis aksara, ia mestilah set aksara utf8mb4 Dan peraturan pengisihan ialah utf8mb4_0900_as_cs, jika tidak, ralat akan dilaporkan versi ini tidak menyokongnya:

    Jika anda ingin mencipta indeks berbilang nilai untuk binari. rentetan binari, peraturan pengisihan mestilah binari, jika tidak ralat akan dilaporkan dan ia tidak disokong.

    Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

    Selepas mengubah suai peraturan pengisihan, indeks boleh ditambah dengan jayanya:

    Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

    Indeks objek tatasusunan JSON

    Sintaks

    ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$[*].key' AS UNSIGNED array ) ) );
    Salin selepas log masuk

    Nota: Terdapat dua lapisan kurungan tunggal di luar sintaks CAST! Jika anda kurang menulis satu, ralat akan dilaporkan!

    Kes ujian

    DROP TABLE IF EXISTS `customers`;
    /*建表语句*/
    CREATE TABLE customers ( 
    	id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    	modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    	custinfo JSON NOT NULL 
    );
    /*插入写测试数据*/
    INSERT INTO customers
    VALUES
    	( NULL, NOW(), '[{"key":94582},{"key":94536}]'),
    	( NULL, NOW(), '[{"key":94568},{"key":94507},{"key":94582}]'),
    	( NULL, NOW(), '[{"key":94477},{"key":94507}]'),
    	( NULL, NOW(), '[{"key":94536}]'),
    	( NULL, NOW(), '[{"key":94507},{"key":94582}]');
    /*添加多值索引*/
    ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$[*].key' AS UNSIGNED array)) );
    /*测试 MEMBER OF 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	94507 MEMBER OF ( custinfo -> '$[*].key' );
    /*测试 JSON_CONTAINS 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	JSON_CONTAINS(
    		custinfo -> '$[*].key',
    	CAST( '[94582, 94507]' AS JSON ));
    /*测试 JSON_OVERLAPS 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	JSON_OVERLAPS (
    		custinfo -> '$[*].key',
    	CAST( '[94477, 94582]' AS JSON ));
    Salin selepas log masuk

    Lihat pelan pelaksanaan dan ketahui bahawa indeks boleh digunakan:

    Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

    Dibuat dalam indeks gabungan sintaks indeks berbilang nilai

    sintaks

    adalah serupa dengan indeks gabungan biasa, dan juga mengikut prinsip padanan paling kiri:

    ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified
    ( age, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )), modified );
    Salin selepas log masuk

    Nota: kurungan perlu untuk digunakan di luar sintaks CAST di sini berdiri!

    Kes ujian

    DROP TABLE IF EXISTS `customers`;
    /*建表语句*/
    CREATE TABLE customers ( 
    	id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    	age tinyint(4) not null,
    	modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    	custinfo JSON NOT NULL 
    );
    /*插入写测试数据*/
    INSERT INTO customers
    VALUES
    	( NULL, 21, NOW(), '[{"key":94582},{"key":94536}]'),
    	( NULL, 22, NOW(), '[{"key":94568},{"key":94507},{"key":94582}]'),
    	( NULL, 23, NOW(), '[{"key":94477},{"key":94507}]'),
    	( NULL, 24, NOW(), '[{"key":94536}]'),
    	( NULL, 25, NOW(), '[{"key":94507},{"key":94582}]');
    /*添加多值索引*/
    alter table customers DROP INDEX idx_age_custinfo$list_modified ;
    ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ( age, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )),modified );
    ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ((CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )), age,modified  );
    ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ( age,modified, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )) );
    /*测试 MEMBER OF 语法*/
    SELECT
    	* 
    FROM
    	customers 
    WHERE
    	94536 MEMBER OF ( custinfo -> '$[*].key' ) and modified = '2021-08-05 10:36:34' and age = 21;
    Salin selepas log masuk

    Lihat pelan pelaksanaan dan ketahui bahawa indeks boleh digunakan:

    Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL

    Penghadan indeks berbilang nilai

    • Indeks berbilang nilai hanya dibenarkan mengandungi nilai satu atribut

    • Indeks ini pada masa ini hanya menyokong tiga Sintaks

    Pada masa ini, hanya tiga sintaks: MEMBER OF, JSON_CONTAINS(), dan JSON_OVERLAB() boleh menggunakan indeks berbilang nilai.

    • Nilai indeks mesti ditukar kepada tatasusunan

    ( CAST( custinfo -> '$.key ' AS UNSIGNED array)), tatasusunan dalam sintaks boleh ditinggalkan Sebab mengapa ia terpaksa ditambah adalah kerana jika ia tidak ditambah, ia bukan struktur tatasusunan, di atas tiga sintaks tidak boleh digunakan secara langsung Ia perlu ditukar melalui JSON_ARRAY() dan kaedah lain Ia hanya boleh digunakan kemudian, yang akan menyebabkan indeks menjadi tidak sah. Oleh itu, tidak kira sama ada medan yang akan diindeks ialah medan nilai tunggal atau medan tatasusunan, kata kunci tatasusunan mesti ditambah.

    • Indeks ini tidak disokong untuk perkaitan jadual

    • Tidak boleh digabungkan dengan indeks awalan

    • Tidak menyokong penciptaan indeks berbilang nilai dalam talian

    Ayat ini bermaksud operasi menggunakan ALGORITHM=COPY , iaitu, melalui Buat struktur jadual baharu dan kemudian salin data untuk mencipta indeks. Oleh itu operasi DML tidak dibenarkan semasa proses ini.

    • Indeks berbilang nilai mempunyai keperluan yang jelas untuk medan jenis set aksara

    Peraturan pengumpulan set aksara binari mestilah Pengumpulan perduaan

    set aksara utf8mb4 mestilah utf8mb4_0900_as_cs

    Sebarang set aksara atau himpunan lain tidak boleh mencipta indeks berbilang nilai dan ralat akan dilaporkan semasa menciptanya versi tidak menyokongnya.

    Senario Aplikasi

    Senario aplikasi indeks berbilang nilai adalah sangat luas! Dengan dia, banyak jadual perhubungan tidak boleh digunakan lagi! Mari kita ambil contoh mudah: teg pengguna Dalam banyak senario, pengguna akan diberi pelbagai tag, seperti 1 tinggi, 2 kaya, 3 tampan Untuk membuat statistik atau pertanyaan penapisan berikutnya dengan lebih cekap, kami tidak boleh menggunakan teg ini secara langsung Storan, kerana kecekapan pertanyaan tidak tinggi tanpa indeks, jadual perkaitan sering digunakan untuk menyimpan perhubungan tag pengguna. Tetapi kini dengan indeks berbilang nilai, kami boleh menyimpan teg sebagai medan!

    Ini hanyalah satu daripada adegan kecil Terdapat banyak adegan yang serupa. Pengguna boleh menukarnya kepada apa-apa sahaja, dan label itu juga boleh ditukar kepada mana-mana atribut lain hubungan banyak-ke-banyak Kemudian jika atribut ini tidak perlu dikaitkan dengan jadual lain), anda boleh menggunakan indeks berbilang nilai! Indeks berbilang nilai tidak menyokong perkaitan jadual, jadi adalah tidak sesuai jika anda perlu menggunakan medan ini untuk perkaitan jadual.

    Atas ialah kandungan terperinci Bagaimana untuk mencipta indeks untuk medan JSON dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    Video Face Swap

    Video Face Swap

    Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

    Artikel Panas

    <🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Nordhold: Sistem Fusion, dijelaskan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Topik panas

    Tutorial Java
    1672
    14
    Tutorial PHP
    1277
    29
    Tutorial C#
    1256
    24
    Contoh Pengenalan Laravel Contoh Pengenalan Laravel Apr 18, 2025 pm 12:45 PM

    Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

    MySQL dan PHPMyAdmin: Ciri dan Fungsi Teras MySQL dan PHPMyAdmin: Ciri dan Fungsi Teras Apr 22, 2025 am 12:12 AM

    MySQL dan phpmyadmin adalah alat pengurusan pangkalan data yang kuat. 1) MySQL digunakan untuk membuat pangkalan data dan jadual, dan untuk melaksanakan pertanyaan DML dan SQL. 2) Phpmyadmin menyediakan antara muka intuitif untuk pengurusan pangkalan data, pengurusan struktur meja, operasi data dan pengurusan kebenaran pengguna.

    Mysql vs Bahasa Pengaturcaraan Lain: Perbandingan Mysql vs Bahasa Pengaturcaraan Lain: Perbandingan Apr 19, 2025 am 12:22 AM

    Berbanding dengan bahasa pengaturcaraan lain, MySQL digunakan terutamanya untuk menyimpan dan mengurus data, manakala bahasa lain seperti Python, Java, dan C digunakan untuk pemprosesan logik dan pembangunan aplikasi. MySQL terkenal dengan prestasi tinggi, skalabilitas dan sokongan silang platform, sesuai untuk keperluan pengurusan data, sementara bahasa lain mempunyai kelebihan dalam bidang masing-masing seperti analisis data, aplikasi perusahaan, dan pengaturcaraan sistem.

    Kaedah pemasangan kerangka Laravel Kaedah pemasangan kerangka Laravel Apr 18, 2025 pm 12:54 PM

    Ringkasan Artikel: Artikel ini menyediakan arahan langkah demi langkah terperinci untuk membimbing pembaca tentang cara memasang rangka kerja Laravel dengan mudah. Laravel adalah rangka kerja PHP yang kuat yang mempercepat proses pembangunan aplikasi web. Tutorial ini merangkumi proses pemasangan dari keperluan sistem untuk mengkonfigurasi pangkalan data dan menyediakan penghalaan. Dengan mengikuti langkah -langkah ini, pembaca dapat dengan cepat dan cekap meletakkan asas yang kukuh untuk projek Laravel mereka.

    Terangkan tujuan kunci asing di MySQL. Terangkan tujuan kunci asing di MySQL. Apr 25, 2025 am 12:17 AM

    Di MySQL, fungsi kunci asing adalah untuk mewujudkan hubungan antara jadual dan memastikan konsistensi dan integriti data. Kekunci asing mengekalkan keberkesanan data melalui pemeriksaan integriti rujukan dan operasi cascading. Perhatikan pengoptimuman prestasi dan elakkan kesilapan biasa apabila menggunakannya.

    Bandingkan dan kontras MySQL dan Mariadb. Bandingkan dan kontras MySQL dan Mariadb. Apr 26, 2025 am 12:08 AM

    Perbezaan utama antara MySQL dan MariaDB adalah prestasi, fungsi dan lesen: 1. MySQL dibangunkan oleh Oracle, dan Mariadb adalah garpu. 2. MariaDB boleh melakukan lebih baik dalam persekitaran beban tinggi. 3.MariADB menyediakan lebih banyak enjin dan fungsi penyimpanan. 4.MYSQL mengamalkan lesen dua, dan MariaDB adalah sumber terbuka sepenuhnya. Infrastruktur yang sedia ada, keperluan prestasi, keperluan fungsional dan kos lesen perlu diambil kira apabila memilih.

    SQL vs MySQL: menjelaskan hubungan antara kedua -dua SQL vs MySQL: menjelaskan hubungan antara kedua -dua Apr 24, 2025 am 12:02 AM

    SQL adalah bahasa standard untuk menguruskan pangkalan data relasi, manakala MySQL adalah sistem pengurusan pangkalan data yang menggunakan SQL. SQL mentakrifkan cara untuk berinteraksi dengan pangkalan data, termasuk operasi CRUD, sementara MySQL melaksanakan standard SQL dan menyediakan ciri -ciri tambahan seperti prosedur dan pencetus yang disimpan.

    MySQL: Pangkalan Data, Phpmyadmin: Antara Muka Pengurusan MySQL: Pangkalan Data, Phpmyadmin: Antara Muka Pengurusan Apr 29, 2025 am 12:44 AM

    MySQL dan phpmyadmin boleh diuruskan dengan berkesan melalui langkah -langkah berikut: 1. Buat dan hapus pangkalan data: hanya klik phpmyadmin untuk diselesaikan. 2. Mengurus Jadual: Anda boleh membuat jadual, mengubahsuai struktur, dan menambah indeks. 3. Operasi Data: Menyokong memasukkan, mengemas kini, memadam data dan melaksanakan pertanyaan SQL. 4. Data Import dan Eksport: Menyokong SQL, CSV, XML dan format lain. 5. Pengoptimuman dan Pemantauan: Gunakan arahan yang boleh dioptimumkan untuk mengoptimumkan jadual dan gunakan penganalisis pertanyaan dan alat pemantauan untuk menyelesaikan masalah prestasi.

    See all articles