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

MySQL-lagrede procedurer bruger dem eller ikke til at bruge dem

I modsætning til den faktiske programmeringssprogskode, de:

  • ikke bærbar (hver db har sin egen version af PL/SQL. Nogle gange forskellige versioner af den samme databasen er inkompatible - jeg har set det!)
  • ikke let at teste - du har brug for en rigtig (dev) databaseinstans til at teste dem og dermed enhedsteste deres kode som en del af en build er praktisk talt umuligt
  • ikke let at opdatere/frigive - du skal droppe/oprette dem, dvs. ændre produktions-DB for at frigive dem
  • har ikke biblioteksunderstøttelse (hvorfor skrive kode, når en anden har det)
  • er ikke let at integrere med andre teknologier (prøv at ringe til en webtjeneste fra dem)
  • de bruger et sprog, der er omtrent lige så primitivt som Fortran, og er derfor uelegant og besværligt at få lavet nyttig kodning, så det er svært at udtrykke forretningslogik, selvom det typisk er det, der er deres primære formål
  • tilbyder ikke fejlfinding/sporing/meddelelseslogning osv. (nogle dbs understøtter muligvis dette - jeg har dog ikke set det)
  • mangler en anstændig IDE til at hjælpe med syntaks og links til andre eksisterende procedurer (f.eks. som Eclipse gør for java)
  • Folk, der er dygtige til at kode dem, er sjældnere og dyrere end app-kodere
  • deres "høj ydeevne" er en myte, fordi de kører på databaseserveren, som de normalt øger db-serverbelastningen, så brug af dem vil normalt reducere din maksimale transaktionsgennemstrømning
  • manglende evne til effektivt at dele konstanter (normalt løst ved at oprette en tabel og søge den inde fra din procedure - meget ineffektiv)
  • osv.

Hvis du har en meget databasespecifik handling (f.eks. en handling i transaktionen for at opretholde db-integritet), eller holder dine procedurer meget atomiske og enkle, kan du måske overveje dem.

Forsigtighed tilrådes, når du angiver "høj ydeevne" foran. Det fører ofte til dårlige valg på bekostning af godt design, og det vil bide dig meget hurtigere, end du tror.

Brug lagrede procedurer på egen risiko (fra en, der har været der og aldrig vil tilbage). Min anbefaling er at undgå dem som pesten.



  1. MySQL Indsætte i flere tabeller? (Databasenormalisering?)

  2. Hvordan får man poster tilfældigt fra Oracle-databasen?

  3. Hvordan kan jeg indstille en String[]-parameter til en indbygget forespørgsel?

  4. Sender xml-strengparameter til SQL Server-lagret procedure