Indecși Invizibili în MySQL 8 (INVISIBLE INDEX) în MySQL

Testarea impactului eliminării unui index fără a-l șterge fizic de pe disc: comutarea stării INVISIBLE pentru optimizatorul de interogări.

Sintaxă
ALTER TABLE comenzi ALTER INDEX idx_data INVISIBLE;

În bazele de date mari cu sute de milioane de rânduri, ștergerea unui index (DROP INDEX) este o operațiune riscantă și ireversibilă: dacă descoperi câteva ore mai târziu că un raport important sau o interogare critică s-a blocat din lipsa acelui index, re-crearea lui poate dura ore întregi și poate bloca serverul de producție.

Indecșii Invizibili (Invisible Indexes) din MySQL 8.0 rezolvă această problemă: poți marca un index ca fiind INVISIBLE. Când un index este invizibil, optimizatorul de interogări îl ignoră complet (se comportă exact ca și cum nu ar exista), dar motorul InnoDB continuă să îl mențină și să îl actualizeze în fundal la fiecare operațiune de scriere. Dacă totul este în regulă, îl poți șterge definitiv; dacă apar probleme, îl reactivezi instantaneu în 0.01 secunde!

Comenzi de comutare și testare a indecșilor invizibili
-- 1. Marcarea indexului ca invizibil (operațiune instantanee de metadate)
ALTER TABLE comenzi ALTER INDEX idx_data_creare INVISIBLE;

-- 2. Testarea interogărilor: acum EXPLAIN va ignora acest index
EXPLAIN SELECT * FROM comenzi WHERE data_creare > '2026-01-01';

-- 3. Dacă observi degradare de performanță, îl reactivezi INSTANT:
ALTER TABLE comenzi ALTER INDEX idx_data_creare VISIBLE;

-- 4. Crearea directă a unui index invizibil la crearea tabelului
CREATE TABLE produse (
    id INT PRIMARY KEY AUTO_INCREMENT,
    cod_bare VARCHAR(50),
    INDEX idx_cod_bare (cod_bare) INVISIBLE
);

Forțarea Utilizării pentru Sesiunea Curentă

Un administrator poate testa comportamentul unui index invizibil înainte de a-l face public setând variabila de sistem la nivel de sesiune:

SET SESSION optimizer_switch = 'use_invisible_indexes=on';