Zrozum swoje wymagania przed zaprojektowaniem schematu (jeśli to możliwe).
Dowiedz się o danych, 1) indeksowaniu 2) rodzaju używanego miejsca do przechowywania, 3) silniku dostawcy lub funkcjach; tj. ... buforowanie, możliwości w pamięci 4) typy danych 5) rozmiar tabeli 6) częstotliwość zapytań 7) powiązane obciążenia, jeśli zasób jest współużytkowany 8) Test
A) Wymagania mogą się różnić. Jeśli sprzęt nie jest w stanie obsłużyć oczekiwanego obciążenia, należy ponownie ocenić, w jaki sposób zapewnić wymagania dotyczące obciążenia. Jeśli chodzi o kolumnę dodawania do tabeli. Jeśli baza danych obsługuje widoki, możesz utworzyć indeksowany (?) Widok określonych danych z określonymi nazwanymi kolumnami (zamiast wybrać „*”). Okresowo sprawdzaj dane i schemat, aby upewnić się, że nigdy nie napotkasz syndromu „odśmiecanie” -> „odśmiecanie”.
Zakładając, że nie ma innego rozwiązania; możesz wziąć pod uwagę następujące kwestie. Zawsze istnieje wiele rozwiązań problemu.
1) Indeksowanie: Select * wykona skanowanie tabel. W zależności od różnych czynników może to obejmować wyszukiwanie dysku i / lub rywalizację z innymi zapytaniami. Jeśli tabela jest wielozadaniowa, upewnij się, że wszystkie zapytania są wydajne i wykonywane poniżej czasów docelowych. Jeśli jest duża ilość danych, a sieć lub inny zasób nie jest dostrojony; musisz wziąć to pod uwagę. Baza danych jest wspólnym środowiskiem.
2) rodzaj przechowywania. Tj .: jeśli używasz dysków SSD, dysku lub pamięci. Czasy wejścia / wyjścia i obciążenie systemu / procesora będą się różnić.
3) Czy DBA może dostroić bazę danych / tabele w celu zwiększenia wydajności? Zakładając z jakiegokolwiek powodu, zespoły zdecydowały, że wybór „*” jest najlepszym rozwiązaniem problemu; czy DB lub tabela mogą zostać załadowane do pamięci. (Lub inna metoda ... może odpowiedź została zaprojektowana w taki sposób, aby odpowiadała z 2-3 sekundowym opóźnieniem? --- podczas gdy reklama gra w celu uzyskania przychodów firmy ...)
4) Zacznij od linii podstawowej. Poznaj swoje typy danych i sposób prezentacji wyników. Mniejsze typy danych, liczba pól zmniejsza ilość danych zwracanych w zestawie wyników. To pozostawia zasoby dostępne na inne potrzeby systemowe. Zasoby systemowe są zwykle ograniczone; „zawsze” działa poniżej tych limitów, aby zapewnić stabilność i przewidywalne zachowanie.
5) rozmiar tabeli / danych. wybierz „*” jest wspólne dla małych tabel. Zazwyczaj mieszczą się w pamięci, a czasy reakcji są szybkie. Znowu .... sprawdź swoje wymagania. Zaplanuj pełzanie funkcji; zawsze planuj bieżące i możliwe przyszłe potrzeby.
6) Częstotliwość zapytań / zapytań. Bądź świadomy innych obciążeń w systemie. Jeśli to zapytanie uruchamia się co sekundę, a tabela jest niewielka. Zestaw wyników można zaprojektować tak, aby pozostawał w pamięci podręcznej / pamięci. Jeśli jednak zapytanie jest częstym procesem wsadowym z gigabajtami / terabajtami danych ... lepiej jest poświęcić dodatkowe zasoby, aby zapewnić, że nie wpłynie to na inne obciążenia.
7) Powiązane obciążenia. Dowiedz się, jak wykorzystywane są zasoby. Czy sieć / system / baza danych / tabela / aplikacja jest dedykowana czy współdzielona? Kim są interesariusze? Czy dotyczy to produkcji, rozwoju czy kontroli jakości? Czy jest to tymczasowa „szybka poprawka”. Czy przetestowałeś scenariusz? Będziesz zaskoczony, jak wiele problemów może istnieć na obecnym sprzęcie. (Tak, wydajność jest szybka ... ale konstrukcja / wydajność jest nadal obniżona.) Czy system musi wykonywać 10 000 zapytań na sekundę w porównaniu z 5-10 zapytaniami na sekundę. Czy serwer bazy danych jest dedykowany lub wykonuje inne aplikacje, monitorowanie wykonuje się na udostępnionym zasobie. Niektóre aplikacje / języki; O / S zajmują 100% pamięci, powodując różne objawy / problemy.
8) Test: Przetestuj swoje teorie i zrozum, o ile możesz. Twój wybór „*” może być poważną sprawą lub może być czymś, o co nawet nie musisz się martwić.
SELECT COUNT(*)
bycie złym jest niezwykle stare i nieaktualne . Aby uzyskać informacje na tematSELECT *
- patrz: stackoverflow.com/questions/1960036/…