Wichtig! Das ist eine Problemumgehung und es passt nicht alle Fälle. Aber in bestimmten Situationen kann es nützlich sein.
Diese Problemumgehung hilft, die Leistung zu sparen, wird jedoch durch Verwendung zusätzlicher Speichermengen bezahlt.
Beispiel Fall
Setup Lassen Sie uns ein einfaches Beispielfall:
term
------------------
...
Understanding InnoDB clustered indexes
...
und Benutzer alle Bedingungen stimmen mit den folgenden Prädikat suchen:
term LIKE '%InnoDB%'
Bei vereinfachen Sie Begriff wie InnoDB%, wird diese Phrase von der Suche verloren.
Umgehung
Rterm Säule einführen, die umgekehrt Begriff enthalten:
term rterm
------------------
...
Understanding InnoDB clustered indexes sexedni deretsulc BDonnI gnidnatsrednU
...
Fügen Sie einen Index auf die Spalte Rterm:
ALTER TABLE `t_term`
ADD INDEX `rterm` (`rterm`);
oder Einzigen auf Ihrem Fall abhängig:
ALTER TABLE `t_term`
ADD UNIQUE `rterm` (`rterm`);
Suche Nehmen durch das folgende Prädikat:
term LIKE 'InnoDB%' OR rterm LIKE 'BDonnI%'
wo 'BDonnI' ist eine umgekehrte Zeichenfolge für 'InnoDB'.
Gewinn!
Abfrage-Plan
MySQL-Abfrage Rterm columnn
MySQL verfügt über eine praktische String-Funktion REVERSE() zu füllen. So füllen Rterm Spalte Verwendung:
UPDATE t_term SET rterm = REVERSE(term)
Wenn Sie den gesamten Index scannen müssen, weil Sie nicht auf seine Bestellung verlassen können, was wäre der Leistungsvorteil sein? (Auf keinen Fall denke ich, dass es eine schlechte Frage ist.) –
@ ÁlvaroGonzález Es ist eine häufige Frage, und ich möchte einen Trick teilen, den ich für SO-Benutzer verwende. –