Här är en idé. Du kan ladda ner de dyra operationerna till en uppdatering när livsmedelsaffären infogar/uppdaterar nya erbjudanden snarare än när slutanvändaren väljer data att se. Detta kan verka som ett icke-dynamiskt sätt att hantera sorteringsdata, men det kan öka hastigheten. Och, som vi vet, finns det alltid en avvägning mellan prestanda och andra kodningsfaktorer.
Skapa en tabell för nästa och föregående för varje erbjudande och varje sorteringsalternativ. (Alternativt kan du lagra detta i erbjudandetabellen om du alltid kommer att ha tre sorteringsalternativ -- frågehastighet är en bra anledning att avnormalisera din databas)
Så du skulle ha dessa kolumner:
- Sorteringstyp (osorterat, pris, klass och prisbeskrivning)
- Erbjudande-ID
- Föregående ID
- Nästa ID
När detaljinformationen för erbjudandets detaljsida efterfrågas från databasen, skulle NextID och PrevID vara en del av resultaten. Så du skulle bara behöva en fråga för varje detaljsida.
Varje gång ett erbjudande infogas, uppdateras eller tas bort, skulle du behöva köra en process som validerar integriteten/noggrannheten hos sorttypetabellen.