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

Hvad skal indekseres for at forbedre ydeevnen?

Generelt kan udvælgelsesfiltrene bruge indekser på user_id eller activity_type_id eller begge dele (i begge rækkefølge).

Bestillingsoperationen kan muligvis bruge et filter på created_at .

Det er sandsynligt, at for denne forespørgsel, et sammensat indeks på (user_id, activity_type_id) ville give det bedste resultat, forudsat at MySQL rent faktisk kan gøre brug af det. I modsat fald vil det sandsynligvis være bedre at indeksere user_id end activity_type_id fordi det sandsynligvis vil give bedre selektivitet. En grund til at tro det er, at der ville være 4 underafsnit af indekset at scanne, hvis det bruger et indeks på activity_type_id , sammenlignet med kun én undersektion, der skal scannes, hvis den bruger et indeks på user_id alene.

At prøve at stole på et indeks for sorteringsrækkefølgen vil sandsynligvis betyde en fuld tabelscanning, så det er mindre sandsynligt, at det vil være gavnligt. Jeg ville ikke oprette et indeks på created_at for at understøtte denne forespørgsel; der kan være andre forespørgsler, hvor det ville være en fordel.



  1. Codeigniter $this->db->reconnect(); brug

  2. Hvordan ændrer du sorteringstypen for en MySQL-kolonne?

  3. Slut dig til to tabeller og udtræk den laveste pris med flere betingelser (multiple sku)

  4. Introduktion til Inline Table-Valued Functions (ITVF) i SQL Server