sql >> Databasteknik >  >> RDS >> Mysql

Bästa praxisfråga för MySQL:beställa efter id eller datum?

Om det finns en chans att du kommer att lägga till två med samma datum, behöver du förmodligen:

SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(notera "fallande"-satsen på båda fälten).

Du måste dock ta hänsyn till vad du vill ska hända när någon lägger till en justeringspost den 2 februari som ges datumet 31 januari för att säkerställa att januari månad är komplett. Den kommer att ha ett ID som är större än det som gjordes den 1 februari.

I allmänhet fungerar redovisningssystem bara på datumet. Kanske om du kunde berätta varför ordningen är viktig, vi kan komma med andra förslag.

Som svar på din kommentar:

Jag skulle ge några råd - det här är allt jag kan komma på direkt, jag brukar spy ut mycket mer "råd" med ännu mindre uppmuntran :-) De två första, mer databasrelaterade än redovisningsrelaterade, är:

Gör först allt i tredje normalform och bara återgå om och när du har prestationsproblem. Detta kommer att spara dig mycket ångest med dubbletter av data som kan komma i otakt. Även om du återgår, använd triggers och andra DBMS-funktioner för att säkerställa att data inte hamnar i otakt.

Om du till exempel vill snabba på dina sökningar på en efternamnkolumn kan du skapa en kolumn upper_last_name (indexerad) och sedan använda den för att hitta poster som matchar din redan versala sökterm. Detta kommer nästan alltid att vara snabbare än funktionen per rad upper(last_name) . Du kan använda en utlösare för infoga/uppdatering för att säkerställa att upper_last_name alltid är korrekt inställt och detta medför kostnaden endast när namnet ändras, inte varje gång du söker.

För det andra, duplicera inte data ens över tabeller (som ditt nuvarande schema) såvida du inte kan använda samma trigger-typ knep för att garantera att data inte kommer i otakt. Vad kommer din kund att göra när du skickar en faktura till dem där det slutliga saldot inte matchar startsaldo plus köp? Det kommer inte att få ditt företag att se särskilt professionellt ut :-)

För det tredje (och detta är mer redovisningsrelaterat) behöver du i allmänhet inte oroa dig för antalet transaktioner när du beräknar saldon i farten. Det beror på att redovisningssystem vanligtvis har en roll-over-funktion vid årsskiftet som återställer ingående balanser.

Så du behöver vanligtvis aldrig behandla mer än ett års data på en gång, vilket, såvida du inte är den amerikanska regeringen eller Microsoft, inte är så betungande.



  1. Hur ställer jag in det valda objektet i en rullgardinsmeny

  2. Det bästa sättet att få den första och sista dagen i förra månaden?

  3. MySQL Cloud Backup and Restore Scenarios med hjälp av Microsoft Azure

  4. Komma i CSV-data