Mengendalikan Ralat "Kunci Ditentukan Terlalu Panjang" untuk Definisi Indeks
Mesej ralat "Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 1000 bait" menunjukkan isu dengan panjang indeks yang ditakrifkan untuk jadual. Ralat ini boleh berlaku walaupun pertanyaan telah berjaya berfungsi pada masa lalu, kerana ia boleh dipengaruhi oleh faktor seperti versi pelayan pangkalan data, jenis indeks dan data lajur.
Dalam pertanyaan yang disediakan:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`) ... )
Indeks indeks ditakrifkan pada empat lajur: id_menu_induk, pautan_menu, pemalam dan alias. Panjang gabungan lajur ini melebihi 1000 bait, mengakibatkan ralat.
Untuk menyelesaikan isu ini, terdapat beberapa pendekatan:
1. Kurangkan Panjang Lajur Indeks:
Cara paling mudah untuk membetulkan ralat ialah mengurangkan panjang lajur indeks. Ini boleh dilakukan dengan menggunakan indeks awalan, di mana hanya sebahagian daripada data lajur diindeks. Contohnya:
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
Indeks awalan disyorkan kerana ia mengurangkan saiz indeks dengan ketara sambil mengekalkan carian yang cekap.
2. Tentukan Panjang Awalan Optimum:
Untuk menentukan panjang awalan optimum bagi setiap lajur, adalah berguna untuk menganalisis pengedaran data menggunakan pertanyaan seperti:
SELECT ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10, ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20, ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50, ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100 FROM `pds_core_menu_items`;
Pertanyaan ini memberikan peratusan baris dengan nilai lajur kurang daripada panjang tertentu. Berdasarkan keputusan ini, anda boleh memilih panjang awalan yang sesuai untuk meminimumkan saiz indeks sambil mengekalkan prestasi yang baik.
Pertimbangan Tambahan:
Adalah penting untuk ambil perhatian bahawa ralat juga boleh berlaku jika jumlah panjang indeks melebihi 1000 bait, walaupun semua lajur individu adalah lebih pendek daripada 1000 bait. Oleh itu, apabila mentakrifkan indeks pada berbilang lajur, panjang gabungan harus dipertimbangkan.
Selain itu, jenis data INT(1) dan INT(32) tidak berkaitan dengan isu panjang indeks. Walau bagaimanapun, perlu diingat bahawa argumen berangka dalam jenis data ini tidak menjejaskan storan atau julat nilai, sebaliknya memformat semasa paparan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Kunci Ditentukan Terlalu Panjang; panjang kunci maksimum ialah 1000 bait' dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!