Sie haben hier zwei Fragen, im Allgemeinen sollten Sie Fragen aufteilen.
Wie auch immer, der erste "Wird es helfen Indexierung einer Spalte, wo Sie einen Test für die Länge."
Nein, wird es nicht. Die einzige Möglichkeit, die Leistung hier zu verbessern, wäre eine zusätzliche Spalte, die die Länge des Werts in column_varchar enthält und diesen Wert indiziert.
Sie haben in Kommentaren geschrieben, dass Sie Hashes halten, also werden die Längen alle gleich sein, also muss ich raten, dass einige Passwörter null sind und Sie sie nicht hashen, oder dass Sie von nicht hashed migrieren hacken.
Die zweite Frage: sollten Sie alle Felder in einer WHERE-Klausel indizieren. Dies ist kein automatisches Ja, daher gibt es Bücher, die über die Abfrageoptimierung geschrieben wurden.
Es hängt davon ab, wie viel Nutzen Sie aus dem Index ziehen, und das hängt von der Art der Daten ab.
Der Hauptvorteil liegt zwischen der Geschwindigkeit der Einfügung und der Abfragegeschwindigkeit. Indizes verlangsamen das Einfügen und beschleunigen Abfragen.
Das nächste, was zu berücksichtigen ist, ist die Selektivität.Wenn der Wert, den Sie indexieren, beispielsweise nur drei potenzielle Werte aufweist, muss die Datenbank häufig aktualisiert werden, um einen echten Wert daraus zu erhalten.
In diesem speziellen Fall haben Sie Daten gleichmäßig verteilt (weil es Hashed), Sie haben eine große Selektivität (MD5 hat wenige Kollisionen) und Sie erwarten häufiger Abfragen mit einem einzigen Begriff, also sollten Sie auf jeden Fall indizieren diese Spalte.
Es wird empfohlen, alle in "wo" verwendeten Spalten zu indizieren. Ich habe jedoch eine Frage, wann würden Sie jemals die Spalte "Passwort" durchsuchen müssen? Surely, Ihre Passwortspalte enthält nur Passwort Hashes, richtig? –
@MagnusEriksson, ja mein gespeichertes Passwort ist ein MD5. – Awsj2hd8
md5 ist kein sicherer Hash. Sie können mehr darüber hier lesen: http://php.net/manual/en/faq.passwords.php - Die Sache ist, dass eine Passwort-Spalte nur Einweg-Hash enthalten sollte, einschließlich Salz. Wenn Sie nach der Länge eines Kennworts suchen oder eine Übereinstimmung mit einer SQL-Abfrage finden können, wird Ihr Hash wahrscheinlich falsch implementiert. –