On 1/15/2013 2:47 AM, Stig Johansen wrote:
> Anders Wegge Keller wrote:
>> Hvis det er vigtigt for dig p� forh�nd at vide hvor mange rows du
>> f�r, er der nok ikke anden udvej end at starte med en "SELECT COUNT(*)
>> WHERE <<dine conditions>>".
>
> Den er faktisk heller ikke 'god nok'.
> Antag en database hvor der findes een record med en givenm v�rdi, og
> f�lgende tidslinie for bruger 1 og 2:
> 1) Bruger1: select count(*) from tabel where id=42 - resulatt = 1
> 2) Bruger2: delete from tabel where id=42
> 3) Bruger1 tror nu der er 1, men det er der ikke l�ngere.
Hvilket foruds�tter at der ikke er brugt transaction isolation
level serializable.
>> Personligt ville jeg fors�ge at undg� at v�re afh�ngig af den
>> viden. I mit professionelle virke[1] har jeg aldrig haft brug for at
>> vide hvor mange records jeg f�r tilbage, n�r jeg laver et opslag. Men
>> dit behov kan selvf�lgelig godt v�re et andet.
>
> Af samme �rsag som ovenfor *ved* databasen ikke hvoer mange records der er
> f�re hele results�ttet er hentet.
>
> De 'implementeringer' der returnerer rowcount henter hele skidtet f�r der er
> en angivelse af antallet.
>
> Det kan v�ree s�rdeles problematisk i et flerbruger milj�, da man risikerer
> 'agressive locking scheme', og i sidste ende deadlocks.
Afh�nger af transaction isolation level og om der bruges locking
eller MVCC.
Men derudover er pointen vel lidt s�gt, fordi i de fleste tilf�lde
vil alle r�kker som query returnerer vel blive hentet alligevel.
Grunden til at det ikke er en god l�sning er nok snarere
problemet med data s� store at de ikke kan gemmes i
memory.
Arne