phpbar.de logo

Mailinglisten-Archive

[php] 1.4 milli keys generieren?

[php] 1.4 milli keys generieren?

Gloss Mathias php_(at)_phpcenter.de
Thu, 1 Aug 2002 15:24:21 +0200


Aloha,

> Von: 	Beck, Mike[SMTP:mike.beck_(at)_ibmiller.de]
>
> worüber ich mir mehr Gedanken machen würde:
> Du sagst, dass die Keys nur einmal verwendet werden dürfen?
>
argel, das hatte ich gar nich gelesen ;-)

> Ich würde davon
> absehen die keys danach zu löschen, lieber eine spalte 'giltnoch' als enum
> Feld und da noch einen Index drauf - das ändern des Primärindex könnte
> beim
> löschen einer Zeile aus dieser DB nämlich vergleichsweise lang dauern, das
> nimmt wahrscheinlich den DB Server mehr mit als zu prüfen ob dahinter im
> Enumfeld 'J' oder 'N' steht.
>
hm, ein enum-Feld für J,N braucht wohl genausoviel bytes
wie ein Char-Feld.... deswegen würd ich letzteres nehmen,
das machts einfacher.
Den Datensatz zu löschen, halte ich für wenig sinnvoll,
da wie du schon schreibst, das wesentlich länger dauert,
den Index über die Zufallszahlen neu aufzubauen. (Wäre
eigentlich ein super Anwendungsfall für Oracles Indexbased
Tables oder wie die Dinger heißen ;)

ein Index auf die Enum/Char-Spalte mit geloescht j/n macht
kein Sinn, denn wenn die ~ haelfte der Nummern verbraucht
ist, wird der gar nicht verwendet...

> (ich tippe mal es wird sogar noch schneller, wenn Du auf das enumfeld
> _keinen_ index machst - ich wette MySQL verwendet ihn sowieso nicht (es
> wird
> immer nur ein Index auf einmal verwendet und da wird der auf dem Primärkey
> für MySQL interessanter sein - somit macht Dir ein Index auf dem Enum nur
> wieder das einfügen/ändern langsamer)
>
man könnte auch ein zusammengesetzten index aus schluessel,gebraucht
machen, aber das nützt auch nichts, der muss dann ja aktualisiert
werden, wenn der Schluessel gebraucht wurde.

Ich würde dann ne Tabelle machen mit

schluessel   char/int (je nach Anforderungen)
gebraucht    char(1) default 'n'

Dann die Schluessel importieren, und dann erst den Index
auf die Spalte erstellen (wesentlich schneller!!!)
create index .... on schluessel (oder wie das bei mysql heißt ;)

So, dann kannst du anfangen zu arbeiten.

Bei der Prüfung auf den Schlüssel würde ich das so machen:

update tabelle set gebraucht='j' where schluessel=pruefschluessel
and gebraucht='n'

danach mysql_affected_rows() aufrufen. Das liefert in dem Fall
(eindeutiger Schluessel) 0 oder 1 zurück. Das ist die anzahl
der mit dem update geänderten Datensätze.

0: schluessel gibts nicht und/oder schon gebraucht --> ablehnen
1: schluessel gibts und er wurde noch nicht gebraucht.

Der update kostet dich so viel wie das select (denk ich mal :)
und du hast in eim aufwasch schluessel geprüft und falls gültig,
ungültig gemacht.

Grüße und schönen Feierabend,

Mathias

> Gruß
>
> --
> Mike Beck
> mike.beck_(at)_users.sourceforge.net
> --
> ** http://www.php-center.de **
> Die PHP-Liste: mailto: php_(at)_phpcenter.de
> http://lists.phpcenter.de/mailman/listinfo/php


php::bar PHP Wiki   -   Listenarchive