sql >> Database >  >> RDS >> Mysql

MySQL-index voor MIN en MAX

SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;

houdt van

INDEX(a, b)

beide kolommen, in die volgorde.

De zoekopdracht zoekt in de index naar a = 12 , pakt de eerste (a,b) koppel om MIN(b) . te krijgen en pakt het laatste paar om MAX(b) . te krijgen .

De verklaring over "vervangen door een constante" is verwarrend omdat het te diep ingaat op de details van hoe het eerst uitzoekt hoe de query moet worden uitgevoerd (die toevallig de min en max krijgt), en vervolgens doorgaat met het uitvoeren van wat er nog over is de vraag (er is niets meer over).

Meer in het algemeen is de optimale index meestal een die begint met alle WHERE kolommen vergeleken met constanten met = . Daarna wordt het complex, dus laat me nog een tip geven:

Een "bedekkende" index is er een die alle kolommen heeft die worden genoemd in de SELECT (a en b in mijn voorbeeld).

Sorry, ik lijk niet duidelijker te zijn dan de handleiding.



  1. Is het mogelijk om gegevens in een MySQL-weergave in te voegen?

  2. Versnel to_sql() bij het schrijven van Pandas DataFrame naar Oracle-database met behulp van SqlAlchemy en cx_Oracle

  3. MaxListenersExceededWaarschuwing:mogelijk EventEmitter-geheugenlek gedetecteerd. 11 berichtenluisteraars toegevoegd. Gebruik emitter.setMaxListeners() om de limiet te verhogen

  4. Hernoem Amazon RDS-tabelnaam naar hoofdletter geeft fout