sql >> Databasteknik >  >> RDS >> Mysql

Flera frågor VS lagrad procedur

Alla rekommendationer beror delvis på var skriptet som kör frågorna finns. Om skriptet som kör frågorna är på samma server som MySQL-instansen kommer du inte att se så stor skillnad, men det kommer fortfarande att finnas en liten overhead i att köra 200 000 frågor jämfört med en lagrad procedur.

Mitt råd i alla fall skulle vara att göra det som en lagrad procedur. Du skulle behöva ett par procedurer.

  1. En procedur som kombinerar de 10 påståenden du gör per operation till ett samtal
  2. En procedur som kan iterera över en tabell med argument med en CURSOR att mata in i procedur 1

Din process skulle vara

  1. Fylla en tabell med argument som skulle matas in i procedur 1 genom procedur 2
  2. Utför procedur 2

Detta skulle ge prestandafördelar eftersom det inte finns något behov av att ansluta till MySQL-servern 20000*10 gånger. Medan omkostnaden per begäran kan vara liten, summerar millisekunder. Även om besparingen är 0,1 ms per begäran är det fortfarande 20 sekunder sparat.

Ett annat alternativ kan vara att ändra dina förfrågningar för att utföra alla 20 000 dataoperationer på en gång (om möjligt) genom att justera dina 10 frågor för att hämta data från databastabellen som nämns ovan. Nyckeln till allt detta är att få argumenten inlästa i en enda batch-insättning och sedan använda satser på MySQL-servern inom en procedur för att bearbeta dem utan ytterligare rundresor.




  1. Använda markören i en slinga av en lagrad procedur

  2. Ta reda på om en partition är komprimerad i SQL Server (T-SQL)

  3. Är substr eller LIKE snabbare i Oracle?

  4. Installera Oracle 32-bitars klient på Windows Server Kör redan 64-bitars Oracle Database Server