So habe ich eine Tabelle der Benutzer Favoriten. Es gibt ein paar Millionen Reihen von ihnen.Effiziente Möglichkeit, umorderbare Artikel in einer Datenbank zu speichern
Derzeit haben sie nur drei Spalten: id
(pk), userId
und someFkRef
. Es gibt einen Index für userId
, damit ich die Favoriten eines Benutzers schnell auswählen kann.
Derzeit sind diese von id
bestellt, die effektiv nur die Reihenfolge ist. Wir möchten dem Benutzer eine Chance bieten, seine Favoriten neu zu ordnen, am ehesten durch eine Art Drag & Drop-Interaktion.
Meine erste (und ich vermute, naiv) Ansatz zu diesem wäre einfach eine order
Spalte und einen zusammengesetzten Index über userId
, order
hinzuzufügen. Wenn jedoch der Benutzer nach der Reflektion seinen Artikel in einiger Entfernung über die Liste bewegt, müssen alle Zwischenzeilen zwischen der Startposition und der Endposition des Artikels ihre order
Spalte neu berechnen und daher auch den Index.
Dies ist (höchstwahrscheinlich) schlecht.
Bevor ich lange versuche, genau zu quantifizieren, wie schlecht, frage ich mich, ob es eine bessere Tabelle-basierte Darstellung gibt, die mit den oben beschriebenen Arten von Operationen billiger zu manipulieren ist.
Ich bin nicht davon überzeugt, dass Sie das neue Feld indizieren müssen. –
Im Allgemeinen erfordert 'order by' ops einen Index, nein? – spender
@spender Benötigen Sie Nein, aber wenn Ihre Tabellenzeilen groß sind und Sie eine große Ergebnismenge erhalten, kann die Sortierung mit Hilfe eines Indexes ein wenig weniger E/A generieren. –