sql >> Databasteknik >  >> RDS >> Oracle

Anses att använda select * för en markör i PL/SQL vara dålig programmering?

Använd select * i din kod finns vad jag skulle kalla lat programmering, med flera otäcka biverkningar. Hur mycket du upplever dessa biverkningar kommer att skilja sig åt, men det är aldrig positivt.

Jag kommer att använda några av punkterna som redan nämnts i andra svar, men redigera gärna mitt svar och lägg till några fler negativa punkter om att använda select * .

  1. Du skickar mer data från SQL-motorn till din kod än nödvändigt, vilket har en negativ effekt på prestandan.

  2. Informationen du får tillbaka behöver placeras i variabler (en postvariabel till exempel). Detta kommer att ta mer PGA-minne än nödvändigt.

  3. Genom att använda select * du kommer aldrig att använda ett index enbart för att hämta den önskade informationen, du måste alltid besöka tabellen också (förutsatt att det inte finns något index som innehåller alla kolumner i tabellen). Återigen, med en negativ effekt på prestandan.

  4. Mindre tydligt för folk som underhåller din kod vad din avsikt är. De måste fördjupa sig i koden för att upptäcka alla förekomster av din postvariabel för att veta vad som hämtas.

  5. Du kommer inte att använda SQL-funktioner för att utföra beräkningar, utan lita alltid på PL/SQL eller Java-beräkningar. Du går kanske miste om några fantastiska SQL-förbättringar som analytiska funktioner, modellklausul, rekursiv subquery factoring och liknande.

  6. Från Oracle11 och framåt spåras beroenden på kolumnnivå, vilket innebär att när du använder select * , din kod markeras i dataordboken som "beroende på alla kolumner" i den tabellen. Din procedur kommer att ogiltigförklaras när något händer med en av dessa kolumner. Så att använda select * betyder att din kod kommer att ogiltigförklaras oftare än nödvändigt.

Återigen, lägg gärna till dina egna poäng.



  1. KAN INTE BILJA SKAPA VY PÅ SCHEMA

  2. MySQL - Ska varje tabell innehålla sitt eget id/primära kolumn?

  3. django test app-fel - Fick ett fel när testdatabasen skapades:behörighet nekades att skapa databas

  4. UnicodeWarning:Unicode-likvärdig jämförelse kunde inte konvertera båda argumenten till Unicode