Jonny 5: MySQL: Existenz eines Datensatzes prüfen

Beitrag lesen

Hallo,

$anzahl

Das $result abzuholen ist in diesem Fall eigentlich gar nicht nötig. Man kann das zB auch so machen:

  
SELECT 1 FROM `my_tab` WHERE `col` LIKE 'foo%' LIMIT 1  

Nimm irgendwas, wenn es foo% schon gibt. Wenn das result eine Reihe hat (limit 1) dann existiert der gewünscht Datensatz:

  
$exists = ($result && (mysql_num_rows($result)==1));  

'Index' oder 'Unique' aktiviere, dann liefert mir das Durchstöbern der Spalte mit einem SELECT oder SELECT COUNT ein _schnelleres_ Ergebnis? Oder hab ich das falsch verstanden?

COUNT kann auch bei der Verwendung eines Indexes wenig sinnvoll sein, ausser du benötigst tatsächlich die Anzahl der Übereinstimmungen. Mit Treffer zählen kann die Abfrage deutlich länger dauern, da ja die gesamte Spalte verarbeitet werden muss. Ansonsten wird bei dem erstbesten Ergebnis abgebrochen.

Ein Index für das Beschleunigen ist immer sinnvoll, wenn es keine Wildcard gibt, oder die Wildcard nicht am Anfang steht, da sonst ev intern der gewünschte Index nicht verwendet werden kann, zB: 'fo%' => ok, 'f%o' => ok, braucht länger, '%oo' => Index macht keinen Sinn. Um zu wissen, ob der Index auch wunschgemäß funktioniert verwendet man explain

Bei unique-Geschichten kann natürlich die ON DUPLICATE KEY UPDATE Syntax praktisch sein.