Ich denke, es gibt einige Probleme mit der Abfrage und der Tabellendefinition selbst.
Table.name
ist eine 4K-Zeichenspalte- Die Abfrage sortiert nach dieser Spalte
Sie sortieren basierend auf einer Spalte, in der Sie Zeichenfolgen speichern. Um nach Zeichenketten zu sortieren, müssen Zeichenkettenvergleiche durchgeführt werden. Der String-Vergleich ist in der Regel ein langsamer Vorgang und führt angesichts der Größe der verwendeten Spalte sehr wahrscheinlich zu einer merklichen Leistungseinbuße.
Wir haben keinen Hinweis auf den Inhalt Ihres name
Spalte und es scheint schwierig zu sein, sich einen tatsächlichen Namen vorzustellen, der das erfordern würde viele Zeichen.
Wenn diese Zeichenfolge mehrere Datenteile enthält, die konzeptionell unterschiedlich sind, sollte die Spalte nach Möglichkeit in mehrere separate Spalten aufgeteilt und dann entsprechend normalisiert werden.
Wenn Sie den Inhalt dieser Spalte in mehrere kleinere aufteilen und diese dann verwenden könnten, wären die Zeichenfolgenvergleiche zwar immer noch teuer, aber „schneller“, da die verglichenen Zeichenfolgen erheblich kürzer sind als jetzt.
Eine andere zu berücksichtigende Sache ist, ob Sie die Suche durch Vermeiden optimieren können String-Vergleiche insgesamt oder durch Vermeiden von Abfragen, die trotz der Tatsache, dass Sie Indizes definiert haben, einen vollständigen Tabellenscan verursachen.
Dazu sollten Sie sich die Verwendung von explain
ansehen mit Ihrer Anfrage, damit Sie die Abfrageausführungsplan
Zitieren der Dokumente (meine Hervorhebung):
Bearbeiten 1
Sie haben klargestellt, dass Ihr name
Spalte ist eigentlich für Benutzernotizen. In diesem Fall denke ich, dass Sie Folgendes beachten sollten (zusätzlich zu dem, was bereits erwähnt wurde):
- Benennen Sie die Spalte in etwas um, das ihrem tatsächlichen Inhalt entspricht
- Entfernen Sie den Index aus der Spalte
- Tun Sie nicht Verwenden Sie diese Spalte zum Suchen, Sortieren oder für andere Vorgänge, außer sie nur auszuwählen, um sie anzuzeigen (Es wäre sehr selten, wenn es für etwas anderes verwendet werden musste, IMHO.)
- Erwägen Sie optional, die Spalte in einen
text
zu ändern eingeben und Sie müssen sich nicht mehr so viele Gedanken über Benutzer-Aufsätze machen ohne Warnung abgeschnitten werden (es sei denn, die GUI hat dem Benutzer die gleiche Eingabelängenbeschränkung auferlegt)