Vad anses vara "många" och "FÖR många" databasfrågor på en och samma sida? Hej. Vilken typ av databas använder du? Databasen skall alltid anropas så lite som möjligt! Det är en grundregel jag alltid har med mig... Med SQL server och stored procedures kan du slå ihop många db-operationer i samma fråga och lämna ett resultat, det snabbar upp mycket om man bara behöver EN round-trip till databasen. Jag använder just nu ACCESS men kommer gå över till My-SQL. På pellesofts förstasidan används 3 lagrade procedurer som kallas. Dock är det så att dessa tre procedurer returnerar flera recordset och det är just för att försöka hålla igen antalet asp/db kopplingar. I sista SQL satsen gör du så här för att få med ID=2 istället för ID=1Vettig mängd databasfrågor?
Jag har sett vissa PHP-communitys där man längst ner på sidan kan se att den genererades med hjälp av 100 databasfrågor eller fler. Det låter mycket i mina öron, men jag har inga direkt kunskaper om ifall det verkligen ÄR så farligt.
Hur många databasfrågor används tex här på Pellesofts förstasida?
I ett script för en administreringssida som jag gör så ska man kunna kopiera en artikel som KAN ha tillhörande data i 250-300 poster i andra tabeller. Det blir så in i h*%¤"t£ mycket databasfrågor då. Tyvärr så MÅSTE jag kopiera till helt nya poster eftersom den data som kopieras ska kunna redigeras på den ena artikeln utan att det påverkar den andra. De flesta av dessa 250-300 poster som ska kopieras har bara 2-3 fält med data. Kan också tillägga att detta med att kopiera en artikel på detta sättet är verkligen INTE något som kommer att utföras OFTA, men det KOMMER att utföras då och då.
Vad anses om detta?Sv: Vettig mängd databasfrågor?
Generellt:
Om det inte kräver alldeles färsk data är det bra att cacha informationen i någon form av struktur.
I asp kan detta vara i application/session variabler eller kanske egenutvecklade kompilerade komponenter skrivna just för detta ändamål.
I ASPNET görs det delvis via viewstate. Funkar också bra.
Vidare kan man kanske skriva SQL-lite effektivare för att plocka ut så mycket data det går i färre antal slag mot DB.
Stresstesta gärna med nåt bra verktyg för att kolla hur prestandan samt processerna påverkas. Sv: Vettig mängd databasfrågor?
Det är just sådana här operationer som exempelvis SQL Server, MSDE, Oracle, DB2 och Pervasive SQL är överlägsna på, eftersom de har stöd för lagrade procedurer, där du kan göra 500 operationer på databasen med bara ett anrop.
Problemet att göra många anrop från ASP/ASP.NET är ju att det blir många roundtrips, som är väldigt dåligt för performance. Det blir ju väldigt mycket onödig trafik på nätet om IIS och databas är på olika servrar till exempel.
Sen ska jag väl erkänna att jag har gjort liknande lösningar själv, som har funkat OK. I och med att det inte skall utföras ofta så kan det väl vara OK att vänta några sekunder också.
/Kalle Sv: Vettig mängd databasfrågor?
100 är på tok för många anser jag.
5 är OK men på gränsen till för många.
ETT anrop till databasen för att skapa en sida är att sträva efter.
DU märker ingen skillnad i utv.miljö säkerligen, men med 1000 samtidiga användare så kommer det att märkas. Följer du tumregeln ett anrop/sida kan du lätt skala upp till tusentals användare!
Att kopiera 200 poster från en tabell till en annan skall du absolut inte göra med 200 databasanrop utan givetvis i en och samma fråga, t.ex.
insert into TempTabell(text1, text2, text3)
select text1, text2, text3
from Artiklar
where ID = 15
- finns nu 200 poster med ID=15 så kommer de att i ett naffs sättas in i TempTabell... det tar inte många millisekunder på en modern PC
(funkar i.a.f. så i T-SQL, jag vet inte vad du använder..)Sv: Vettig mängd databasfrågor?
Detta tycker jag såg intressant ut:
insert into TempTabell(text1, text2, text3)
select text1, text2, text3
from Artiklar
where ID = 15
Säg att jag redan har kopierat en artikel som hade id=1. Den nya artikeln som skapades fick tex id=2. Nu har jag en massa data som tillhör artikel 1 som ligger i en annan tabell. Då vill jag kopiera detta också, tex:
insert into Artikeldata (text1, text2, text3)
select text1, text2, text3
from Artikleldata
where ID = 1
Men då måste jag ju när jag kopierar dessa poster få in att de hör till artikel 2. Hur?
insert into TempTabell(artikelid,text1, text2, text3)
2, select text1, text2, text3
from Artiklar
where ID = 15
Nåt sånt eller?Sv: Vettig mängd databasfrågor?
HälsningarSv: Vettig mängd databasfrågor?
<code>INSERT INTO TempTabell(artikelid,text1, text2, text3)
select "2", text1, text2, text3
from Artiklar
where ID = 1</code>
Koden ovan hämtar alla värde för ID=1 och stoppar in dem i TempTabell men med ett ID=2.
Testkör SQL i en accessdatabas som är en kopia på den DB-modell du använder skarpt. När det funkar i Access kan du enkelt kopiera och modifiera SQL koden in i din ASP sida, eller en stored procedure.
/Roger