Adaugă un index în MySQL, dar numai dacă nu există (Programare, Mysql)

Jamie Abbott a intrebat.

Există o modalitate prin care să putem rula un ADD INDEX numai în bazele de date în care nu există?

Un fel de a face un ADD INDEX pe baza rezultatelor de la SHOW INDEX ON…

Încercăm să evităm costurile suplimentare legate de adăugarea accidentală de indici suplimentari acolo unde există deja.

Comentarii

  • În mod normal, adăugarea unui index este o operațiune manuală, efectuată o singură dată pentru o anumită tabelă. Efectuarea verificării înainte de adăugarea indexului nu pare a fi prea împovărătoare, deși probabil că ați putea crea o procedură stocată pentru a implementa acest lucru. –  > Por Gordon Linoff.
  • Mulțumesc, Gordon, trebuia să ruleze în peste 400 de baze de date, dintre care cele mai multe au deja indexul, dar câteva au fost create fără el. –  > Por Jamie Abbott.
1 răspunsuri
karthik manchala

Presupun că sunteți în căutarea a ceva de genul:

CREATE INDEX IF NOT EXISTS index_name ON table(column)

Din păcate, această funcționalitate nu există în mySql. Puteți utiliza stored procedure (așa cum a menționat Gordon Linoff) pentru a verifica dacă există un index și pentru a adăuga un index dacă nu există.

Informațiile despre indici sunt disponibile în INFORMATION_SCHEMA

Puteți face următoarea interogare pentru a verifica dacă există indici:

SELECT COUNT(1) indexExists FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema=DATABASE() AND table_name='mytable' AND index_name='index_name';

Dacă indicele există deja, se obține 1, altfel 0. Puteți utiliza acest lucru într-o procedură pentru a obține ceea ce doriți.

De asemenea, consultați această adresă pentru mai multe informații.

Comentarii

  • Mulțumesc Karthik, cred că voi sfârși prin a o rula în PHP cu două interogări separate. –  > Por Jamie Abbott.

Tags: