2012-04-02 3 views
0

In einer Tabelle 'test' habe ich ein Integer-Feld TestID, mit einem Index.MySQL: ist ein Vergleich mit einer Ganzzahl schneller als mit einem Varchar-Feld?

SELECT * FROM test WHERE TestID=1234 

SELECT * FROM test WHERE TestID='1234' 

SELECT * FROM test WHERE TestID=COALESCE(1234, 0) 

SELECT * FROM test WHERE TestID=COALESCE('1234', '') 

Ich benutze die zweite Option jetzt, weil in meiner Anwendung der 1234 Teil dynamisch eingesetzt wird, und auch NULL oder und leere Zeichenfolge sein könnte, und ich will nicht die Aussage, weil diesen zum Scheitern verurteilt.

Wie groß wäre der Geschwindigkeitsunterschied zwischen diesen Aussagen oder gibt es überhaupt keinen Unterschied?

+1

Antwort auf die Titelfrage ist: ja –

Antwort

0

Wenn Ihre TestID-Spalte nicht indiziert ist, ist varchar langsamer als Integer. Aber wenn dieses Feld indiziert wird, gibt es praktisch keinen Geschwindigkeitsunterschied.

P.S. Wenn Ihre Strings wirklich lang sind, wird der Index voluminöser sein, so dass in diesem Fall die Verwendung von Integer

+0

das Feld wird als Ganzzahl gespeichert (mediumint), so dass der Index auch nie werden kann sperrig, oder? – Dylan

+0

Genau. Der Ausdruck über die Länge von Werten bezieht sich auf Varcharfelder. Ganze Zahlen werden sicher nicht langsamer sein. – denied

Verwandte Themen