sql >> Database teknologi >  >> RDS >> Mysql

Stort antal kolonner i MySQL-databasen

Ok, jeg kan se dit dialemma, og i (formentlig kortvarig) fravær af en databaseekspert vil jeg give dig min mening.

For fornuftens skyld bryd dine data op. Lad os sige, at du gemmer oplysninger om personer. Du behøver ikke 200 kolonner i 1 tabel. Du bør dele dem op og have flere kolonner i mange tabeller. f.eks.

tblGeneralCharacteristics:
 - colEyeColor
 - colHairColor
 - colHeight
 - colWeight

tblInterests:
 - colFaveColor
 - colFaveSport

tblRelationships
 - colMother
 - colFather
 - colBrother
 - colSister

Denne måde er meget bedre. Beregningsmæssigt tvivler jeg på, at det betyder meget. Det er klart, at du for hver forespørgsel får færre data tilbage, så for nogle rapporter (hvor du måske ikke behøver at hente alle data eller trawle alle data igennem) kan det være hurtigere (selvom hvis du indekserer databasen korrekt, så burde det ikke et problem).

Til næste nummer. Det med mængden af ​​poster i databasen. Hvis 10.000 begynder at blive lidt stort, er det tid til at begynde at cache.

Nu, så vidt jeg er bekymret, er der ingen rigtig eller forkert måde at cache data på. Det, du har brug for, er det, du har brug for. Så for eksempel, i dit spørgsmål nævnte du at få gennemsnitlige højder for vægt for poster input mellem januar og marts 2012. Nå... du kunne skrive et cron script, som beregner gennemsnitshøjder for vægt for alle poster input den måned og gemmer dette i en anden tabel et eller andet sted. Når du så kommer til at oprette din rapport, behøver du kun at få værdierne for Jan, Feb og Marts og gennemsnittet af dem... det er meget nemmere. I stedet for at lave en beregningsforespørgsel på potentielt tusindvis af rækker, laver du en cron-forespørgsel (hvilket er ligegyldigt, hvor lang tid det tager) på et par hundrede rækker, og så forespørger den faktiske rapport kun 3 rækker.

Et andet trick er, jo flere beregninger du kan lave i SQL, jo bedre. Hvis du ønsker at gennemsnittet felter/poster eller samlet noget, så send det med din SQL-forespørgsel. SQL-serveren udfører beregningen og returnerer resultatet, i stedet for at returnere dig enorme mængder data, du skal gennemskue. Jeg ved, at dette ikke altid er let/nyttigt, men jo mere du kan få SQL til at gøre det bedre.

Håber dette hjælper. Som jeg sagde, er jeg sikker på, at en databaseekspert klør efter at give dig nogle mere indsigtsfulde råd. :)



  1. MySQL runder datoen til starten af ​​ugen og måneden

  2. Liste alle indeksnavne, kolonnenavne og dets tabelnavn for en PostgreSQL-database

  3. Sådan finder du maksimale værdier i rækker

  4. Mysql-forespørgsel fungerer godt på workbench, men tager for lang tid i r