Rolf b: mysql: Erste freie Zahl finden

Beitrag lesen

Lukas, du hast an der Stelle zwei Probleme.

Zum einen die Laufzeit der Frei-Suche. Die kannst Du vielleicht noch mit einem Index auf die "Zahl" Spalte runterbringen, wenn Dir die Einwände von Matthias nicht stichhaltig erscheinen. Und der "MIN" riecht irgendwie danach, als ob diese Query alle denkbaren freien Zahlen ermittelt und DANN deren Minimum bestimmt. Wäre es möglich, dass Du eine Tabelle mit 99900 Zeilen vorbereitest, mit Spalten "Zahl" und "Verwendet"? Dann kannst Du SELECT MIN(ZAHL) FROM ZAHLEN WHERE Verwendet=0 machen. Das ist ein linearer Tablescan und kein kartesisches Produkt (bzw. ein Index-Scan wenn Du einen anlegst).

Aber dann kommt das Nächste: Du hast eine potentielle Race-Condition. Du schlägst dem User eine Zahl vor, der sagt OK und ups - dann musst Du eine Fehlermeldung ausgeben "Sorry, diese Zahl wurde mittlerweile von jemand anderem kassiert". Weil nämlich dummerweise gleichzeitig ein anderer User unterwegs war und schneller OK geklickt hat. Dieses Problem kannst Du in der entkoppelten Multiuser-Umgebung namens "Web" nie ausschließen. Deshalb: überlege gut, ob Du dir mit dieser Nummer ein geeignetes Konstrukt ausgedacht hast.

Rolf