Rozwijam program śledzenia studentów, w którym muszę przechowywać 15 ocen z egzaminu.
Mogę przechowywać znaki jako ciąg i dzielić je w razie potrzeby, do celów takich jak wykonywanie operacji arytmetycznych. Potrzebuję jednak jak największej wydajności.
Który jest lepszy? Pole pojedynczego ciągu lub 15 pojedynczych pól int?
database-design
query-performance
datatypes
mikrofon
źródło
źródło
Odpowiedzi:
Jeśli mówisz już o dzieleniu i przetwarzaniu, nie przechowuj tego jako tablicy.
Bez względu na teorię relacyjną oraz tradycyjne reguły normalizacji i dogmaty, jest to po prostu projekt, który zapewnia MINIMALNĄ elastyczność.
Spraw, aby każdy wynik egzaminu był wierszem.
Nie staram się przewidzieć wszystkiego, ale istnieje bardzo duża liczba rzeczy, które ułatwia ten bardziej szczegółowy (i tak, znormalizowany) i tylko nieco droższy projekt przestrzenny, którego możesz teraz potrzebować lub nie, a może lub nie. może nie potrzebować w przyszłości:
Wyrzucasz najwyższy i najniższy wynik? Będziesz musiał pokroić tablicę i posortować ją.
Uśrednianie Będziesz musiał go pokroić i zsumować
Analiza wyniku egzaminu po egzaminie wśród studentów? Będziesz musiał kroić i obracać
Sortowanie do zliczania (lub np. Brytyjskie GCSE, gdzie może być 7 As i 2B)? Będziesz musiał kroić i sortować
Zauważ, że całe to krojenie i sortowanie odbywa się bardzo tanio w indeksowanym, znormalizowanym projekcie.
źródło
W przypadku wyników, pod względem wydajności, wyraźny zwycięzca przechowuje to liczbowo coś takiego;
Jest łatwy w wyszukiwaniu, łatwy do aktualizacji i dodawania, a także bardzo łatwy i szybki do wykonywania agregacji. Biorąc pod uwagę wybór „przechowuj tę informację jako ciąg, który muszę podzielić” lub „przechowuj w kolumnie” ... zwycięzca prawie zawsze będzie „przechowywał w kolumnie” dla większości przypadków użycia w RDBMS.
źródło
pod warunkiem, że używasz malutkiej liczby int (od 0 do 255) za pomocą znaku char (15) lub 15 malutki jest taki sam (jeśli chodzi o rozmiar). Zatem z punktu widzenia wydajności wybierz 15 maleintów, ponieważ oszczędzasz na wydobywaniu i obsłudze ciągów.
AKTUALIZACJA
jeśli znaki są dwucyfrowe, potrzebujesz CHAR (30) i jest to dwukrotność 15-krotnego malutkiego.
źródło