Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat 'Kunci Ditentukan Terlalu Panjang; panjang kunci maksimum ialah 1000 bait' dalam MySQL?

Bagaimana untuk Menyelesaikan Ralat 'Kunci Ditentukan Terlalu Panjang; panjang kunci maksimum ialah 1000 bait' dalam MySQL?

DDD
Lepaskan: 2024-12-14 03:55:14
asal
311 orang telah melayarinya

How to Solve the

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`)
  ...
)
Salin selepas log masuk

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))
Salin selepas log masuk

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`;
Salin selepas log masuk

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan