sql >> Database >  >> RDS >> Mysql

Wat is de meest efficiënte manier om een ​​sorteervolgorde op een groep records in een database op te slaan?

Hoe zit het met alleen het gebruik van een integer kolom die de volgorde definieert? Standaard wijst u nummers * 1000 toe, zoals 1000, 2000, 3000.... en als u 3000 verplaatst tussen 1000 en 2000, wijzigt u dit in 1500. In de meeste gevallen hoeft u de andere nummers dus helemaal niet bij te werken. Ik gebruik deze methode en het werkt goed. U kunt ook double . gebruiken maar dan heb je geen controle over de precisie en afrondingsfouten, dus gebruik het liever niet.

Dus het algoritme zou er zo uitzien :stel dat je B naar positie na A verplaatst. Voer eerst select uit om de volgorde van het record naast A te zien. Als het minstens +2 hoger is dan de volgorde van A, stel je de volgorde van B in om ertussenin te passen. Maar als het maar +1 hoger is (er is geen spatie na A), selecteer je de aangrenzende records van B om te zien hoeveel ruimte er aan deze kant is, deel je door 2 en voeg je deze waarde toe aan de volgorde van alle records tussen A en B. Dat is het!

(Merk op dat u transactie/vergrendeling moet gebruiken voor elk algoritme dat meer dan één zoekopdracht bevat, dus dit geldt ook voor dit geval. De eenvoudigste manier is om InnoDB-transactie te gebruiken.)



  1. Toon beperkingen op de opdracht tabellen

  2. Datums in mm/dd/jjjj invoegen in MySQL

  3. Forceer herladen/verversen wanneer u op de terug-knop drukt

  4. Hoe MySQL op CentOS te upgraden