Przestrzeń dyskowa zaalokowana na potrzeby bazy danych jest podzielona na bloki danych, często nazywane stronami. Strona jest podstawową jednostką na której operuje baza danych, co oznacza, że baza danych aby odczytać jeden rekord odczytuje całą stronę, nawet jeżeli na stronie mieście się wiele rekordów.
W bazie danych indeksy tworzone są zazwyczaj w formie binarnych drzew zbalansowanych. Gwarantuje to logarytmiczny czas wykonania wszystkich operacji w bazie. Struktura taka jest szerzej znana jako B-tree. B-tree składa się korzenia, gałęzi oraz liści, które zawierają uporządkowane pozycje.
Na stronie mieści się określona ilość indeksów w zależności od typu i rozmiaru danych użytego do przechowywania indeksu. Z tego też powodu zaleca się używanie 4-bajtowego typu INT jako PRIMARY KEY zamiast pól typu CHAR zajmujących więcej niż 4 bajty.
Taka jest ogólna zasada mająca zastosowanie w 99% przypadków, tylko w niektórych specyficznych sytuacjach lepsze będzie użycie pola CHAR jako PRIMARY KEY.
Co do Twojego problemu to ciężko coś powiedzieć, ponieważ opisałeś strukturę tabel oraz wykonywane na nich zapytania bardzo lakonicznie. Napisałeś, że będziesz miał tabelę order oraz product, a gdzie będziesz przechowywał linijki zamówienia, jakie pola będą w tabeli product, order oraz innych, które będą używane w zapytaniach do tabeli order?