22. november 2004 - 14:45Der er
3 kommentarer og 2 løsninger
Random udtræk fra database
er der en der kan fortælle mig om der er den store forskel på disse 2 random udtræk fra en SQL database, altså om den ene er bedre end den anden til at vælge en tilfældig. Jeg kan menlig ikke kun se at nummer 2 er væsentlig hurtiger end nr 1
-1- Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "SELECT * FROM tabel" rs.Open strSQL, strDSN, 3, 1 rndMax = rs.RecordCount Randomize rndNumber = Int((RND * rndMax)) 'Find et random nummer rs.Move rndNumber 'Flyt til den valgte record
-2- Set rs = Server.CreateObject("ADODB.RecordSet") Sql = "SELECT * FROM tabel ORDER BY NewID()" rs.Open SQL, strDSN, 1, 3
Det er nu mest et skud da jeg ikke rigtig har forstand på det der med random udtræk..
Men vil umiddelbart sige at nr. 2 klart er bedst.. Det vil jeg mene da du så kan nøjes med at trække en record ud og så er det en tilfældig hver gang. hvorimod hvis du benytter 1 så henter du alle data ud, og derefter flytter til den valgte record i stedet...
Vil mene det er at belaste serveren unødigt.. Hvis du kun skal bruge 1 record kan du skrive LIMIT 1 i slutningen af din sql hvis det er en sql database..
Med første motode SELECT'er du alt i tabellen, og beder ovenikøbet om at få en recordcount. Det er en tung omgang, især når du laver din rs.Move. Det er provideren der skal gøre arbejdet, og det er meget tungere for webserveren.
Den sidste metode overlader arbejdet 100% til SQL-serveren. Du skal bare lige huske top 1:
Set rs = Server.CreateObject("ADODB.RecordSet") Sql = "SELECT TOP 1 * FROM tabel ORDER BY NewID()" rs.Open SQL, strDSN, 0, 1
Jeg går udfra at du kun skal bruge én "vinder".
Og så bruger jeg , 0, 1
Det er fordi at jeg regner med at du ikke skal opdatere data i tabellen, men kun læse data. Hvis du også kan undvære .RecordCount og et par andre "dyre" metoder, så kan du nøjes med , 0, 1
Uden jeg behøver gå i detaljer er det væsentlig lettere for båder web- og sql-server at levere
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.