sql >> Databasteknik >  >> RDS >> Mysql

Varför använder MySQL inte alltid indexfusion här?

Wow! Det är den mest komplicerade "indexsammanslagning" jag har sett.

Vanligtvis (kanske alltid ), kan du skapa ett "sammansatt" index för att ersätta en index-merge-skärning, och prestera bättre . Ändra key2 från bara (pinned) till (pinned, DeviceId) . Detta kan bli av med "korsningen" och snabba upp den.

I allmänhet använder Optimizern indexsammanfogning endast i desperation. (Jag tror att detta är svaret på rubrikfrågan.) Alla mindre ändringar av frågan eller de inblandade värdena, och Optimizern kommer att utföra frågan utan indexsammanslagning.

En förbättring av temptabellen __codes är att bygga en permanent tabell med ett stort intervall av värden, använd sedan ett intervall av värden från den tabellen i din Proc. Om du använder MariaDB, använd sedan den dynamiskt byggda "sekvens"-tabellen. Till exempel "tabellen" seq_1_to_100 är effektivt en tabell med en kolumn med nummer 1..100. Inget behov av att deklarera det eller fylla i det.

Du kan bli av med den andra REPEAT loop genom beräkning tiden från Code .

Undviker LOOPs kommer att vara den största prestationsfördelen.

Få allt det gjort, så kanske jag har andra tips.




  1. MySQL-fråga för att hämta data med kolumnnamn

  2. Fråga SUM för två fält i två olika tabeller

  3. mysql-tabellstrukturförslag?

  4. Rutinmässiga rekommendationer för säkerhetskopiering av innehåll