sql >> Database teknologi >  >> RDS >> Mysql

Indeksering for nøglesæt-paginering i mysql

Jeg er stødt på dette problem før. Her er min analyse af det.

  • Det forekommer i MySQL 5.7 og 8.0, men tilsyneladende ikke i ældre versioner og ikke i MariaDB.

  • Den "løsning" jeg foretrækker er at ændre indekserne således:

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Selvom 2-kolonne-indekset teoretisk er identisk med én-kolonne-indekset for InnoDB (forudsat id er PK`), ser optimeringsværktøjet ud til at ignorere dette faktum i nogle situationer .

Jeg kan også godt lide eksplicit at tilføje PK'en når jeg ser et behov . Dette signalerer fremtidige læsere af skemaet (inklusive mig selv), at nogle forespørgsler drager fordel af, at PK'en tilføjes.

Jeg har endnu ikke fundet et tilfælde, hvor "indeksfletning skærer" er hurtigere end et tilsvarende sammensat indeks.

Jeg kan ikke lide nogensinde at bruge indeks-"tip" af frygt for, at datafordelingen vil ændre sig i fremtiden, og mit "tip" vil gøre tingene værre.



  1. Hvordan UNION fungerer i PostgreSQL

  2. laravel 4 - hvordan begrænser (tag og spring) for veltalende ORM?

  3. Sådan fungerer TO_SECONDS() i MariaDB

  4. ugyldigt navnemønster, når du forsøger at videregive en tilpasset objekttilknytning af orakeltypen