sql >> Database >  >> RDS >> Mysql

Meerdere zoekopdrachten VS Opgeslagen Procedure

Elke aanbeveling hangt gedeeltelijk af van waar het script dat de query's uitvoert zich bevindt. Als het script dat de query's uitvoert zich op dezelfde server bevindt als de MySQL-instantie, zult u niet zoveel verschil zien, maar er zal nog steeds een kleine overhead zijn bij het uitvoeren van 200k query's in vergelijking met 1 opgeslagen procedure.

Mijn advies zou hoe dan ook zijn om het als een opgeslagen procedure te maken. Je zou misschien een paar procedures nodig hebben.

  1. Een procedure die de 10 uitspraken die u per bewerking doet, combineert in 1 aanroep
  2. Een procedure die een tabel met argumenten kan herhalen met behulp van een CURSOR invoeren in procedure 1

Uw proces zou zijn

  1. Vul een tabel met argumenten die door procedure 2 in procedure 1 zouden worden ingevoerd
  2. Procedure 2 uitvoeren

Dit zou prestatievoordelen opleveren, aangezien het niet nodig is om 20000*10 keer verbinding te maken met de MySQL-server. Hoewel de overhead per verzoek klein kan zijn, tellen milliseconden op. Zelfs als de besparing 0,1 ms per verzoek is, is dat nog steeds 20 seconden bespaard.

Een andere optie zou kunnen zijn om uw verzoeken aan te passen om alle 20k-gegevensbewerkingen tegelijk uit te voeren (indien mogelijk) door uw 10 query's aan te passen om gegevens uit de bovengenoemde databasetabel te halen. De sleutel tot dit alles is om de argumenten in een enkele batch-insert te laden en vervolgens instructies op de MySQL-server te gebruiken binnen een procedure om ze te verwerken zonder verdere roundtrips.




  1. Update twee verschillende rijen in één regel SQL

  2. Rows_sent:12 Rows_examined:549024 - hoe mySQL-query optimaliseren?

  3. LIKE-query op elementen van platte jsonb-array

  4. Installeer meerdere MySQL-instanties op een Linux-server -gebruik een apart MySQL-configuratiebestand