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

Hvorfor bruger MySQL ikke altid indeksfletning her?

Wow! Det er den mest komplicerede "indeksfletning", jeg har set.

Normalt (måske altid ), kan du lave et 'sammensat' indeks for at erstatte et indeks-flet-kryds, og yde bedre . Skift key2 fra kun (pinned) til (pinned, DeviceId) . Dette kan slippe af med 'skæringspunktet' og fremskynde det.

Generelt bruger Optimizer kun indeksfletning i desperation. (Jeg tror, ​​at dette er svaret på titelspørgsmålet.) Enhver mindre ændring af forespørgslen eller de involverede værdier, og Optimizer udfører forespørgslen uden indeksfletning.

En forbedring af den midlertidige tabel __codes er at bygge en permanent tabel med en lang række værdier, og brug derefter en række værdier fra den tabel inde i din Proc. Hvis du bruger MariaDB, så brug den dynamisk opbyggede "sekvens"-tabel. For eksempel 'tabellen' seq_1_to_100 er effektivt en tabel med én kolonne med tallene 1..100. Ingen grund til at erklære det eller udfylde det.

Du kan slippe af med den anden REPEAT sløjfe ved beregning tiden fra Code .

Undgå LOOPs vil være den største ydeevnefordel.

Få alt det gjort, så har jeg måske andre tips.




  1. MySQL - Perl:Sådan får du en række postnumre inden for indsendte x miles af indsendt postnummer i Perl eksempel

  2. SQL Server 2016:Ydeevnepåvirkning af altid krypteret

  3. Tilføj en kolonne til en tabel i SQL

  4. Automatisk stigningskolonne:forskelle i SQL-syntaks mellem Oracle og MySQL