Mengapa Indeks MySQL VARCHAR(512) Saya Tidak Digunakan?

Susan Sarandon
Lepaskan: 2024-11-25 03:56:12
asal
373 orang telah melayarinya

Why Isn't My MySQL VARCHAR(512) Index Being Used?

Panjang Indeks MySQL VARCHAR

Jadual MySQL mempunyai panjang indeks maksimum 767 bait. Ini adalah setiap lajur, jadi indeks komposit tidak boleh melebihi 767 bait secara keseluruhan. Walau bagaimanapun, terdapat beberapa pengecualian kepada peraturan ini:

  • Dengan pilihan konfigurasi innodb_large_prefix didayakan, had panjang indeks dinaikkan kepada 3072 bait untuk jadual InnoDB menggunakan format baris DINAMIK atau COMPRESSED.
  • Untuk set aksara utf8, MySQL menganggap 3 bait setiap aksara. Oleh itu, bilangan maksimum aksara yang boleh diindeks ialah 255 (767 / 3).

Dalam kes khusus anda:

  • Produk anda table mempunyai lajur nama jenis varchar(512).
  • Anda mencipta indeks pada lajur ini dengan produk ALTER TABLE TAMBAH INDEX (nama(512)).

Indeks yang anda buat tidak digunakan kerana ia melebihi panjang indeks maksimum 767 bait. Ini kerana MySQL menganggap 3 bait setiap aksara UTF-8 dan 512 aksara * 3 bait/aksara = 1536 bait.

Untuk menyelesaikan isu ini, anda boleh:

  • Kurangkan panjang indeks kepada 255 aksara atau kurang.

    ALTER TABLE products ADD INDEX (name(255));
    Salin selepas log masuk
  • Dayakan pilihan konfigurasi innodb_large_prefix dan gunakan format baris DINAMIK atau COMPRESSED.

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;
    Salin selepas log masuk

Tambahan Nota:

  • Jika anda menyimpan kebanyakan aksara ASCII (1 bait setiap aksara), anda boleh menentukan indeks sehingga 767 bait.
  • Ia adalah mungkin untuk menyimpan aksara 4-bait menggunakan set aksara utf8mb4. Walau bagaimanapun, ini akan mengurangkan lagi bilangan maksimum aksara yang boleh diindeks.

Atas ialah kandungan terperinci Mengapa Indeks MySQL VARCHAR(512) Saya Tidak Digunakan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan