Jest to pół hipotetyczne, a ponieważ nie mam doświadczenia w radzeniu sobie z ogromnymi tabelami baz danych, nie mam pojęcia, czy z jakiegoś powodu jest to okropne. Do sytuacji:
Wyobraź sobie aplikację internetową - powiedzmy oprogramowanie księgowe - która ma 20 000 klientów, a każdy klient ma ponad 1000 wpisów w tabeli. To 20 milionów wierszy, które, jak wiem, z pewnością mogą spowolnić złożone zapytania.
Czy w takim przypadku bardziej sensowne jest utworzenie nowej tabeli w bazie danych dla każdego klienta? Jak bazy danych reagują na posiadanie 20 000 (lub więcej!) Tabel?
Brzmi jak zły pomysł.
Nie próbuj przechytrzyć bazy danych takimi egzotycznymi konstrukcjami. Silniki baz danych zostały zaprojektowane z dużą ilością optymalizacji do obsługi dużych zestawów danych. Na przykład to, co opisujesz, brzmi okropnie blisko próby ręcznego wdrożenia indeksów. Wystarczy użyć indeksów dostarczonych przez DB Engine, są one implementowane znacznie lepiej, niż prawdopodobnie będziesz w stanie zrobić samodzielnie, i nie będzie wymagało to tyle konserwacji.
Ponadto, jako ogólna zasada. Sugeruję, aby nie budować bazy danych w sposób, który wymaga manipulacji lub tworzenia struktur bazy danych (tabel, pól) podczas normalnego użytkowania aplikacji. Sprawia, że optymalizacja pod kątem wydajności staje się niedźwiedziem i często zmusza użytkownika do nadania zbyt wielu uprawnień użytkownikom do wykonywania rutynowych zadań, potencjalnie tworząc luki bezpieczeństwa.
źródło
Oto artykuł, który zawsze zachęcam do przeczytania, gdy zadają to pytanie:
http://datacharmer.blogspot.com/2009/03/normalization-and-smoking.html
źródło
IMHO pojedynczy stół nie powinien być problemem, więc nie stawiaj problemu, w którym nie istnieje - jeszcze. Możesz wiele zrobić, aby zwiększyć wydajność. Możesz podzielić pojedynczą tabelę na wiele plików na podstawie ID klienta lub pola daty, aby pomóc w We / Wy. Twoja baza danych nie musi śledzić, optymalizować i buforować 20 000 różnych instrukcji SQL dla każdego zapytania, którego potrzebujesz. Możesz indeksować według clientid. Klienci 20 tys. Mogą zapłacić za dużo sprzętu.
Dla tego typu tabeli można użyć db typu NoSQL.
W przypadku klientów o wielkości 20 000 baza danych może nie być najsłabszym łączem, więc po co wprowadzać tak złożoność?
źródło
To naprawdę złe podejście.
Podziel tabelę na partycje pionowo, 2 serwery bazy danych, jeden dla nieparzystych identyfikatorów użytkowników, a drugi dla parzystych powinien działać dobrze (dane nie są powiązane między użytkownikami).
Posortuj dane według user_id, a jeśli nie będzie to możliwe, zdobądź ogromną ilość pamięci RAM lub SSD.
źródło