[MySQL][PHP] Liczenie wierszy, Liczenie funkcją count w sql vs stworzenie zmiennej |
[MySQL][PHP] Liczenie wierszy, Liczenie funkcją count w sql vs stworzenie zmiennej |
3.11.2017, 20:59:47
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (0%) |
Witam, jak powinno się zliczać wiersze w bazie danych?
Są mi znane 2 opcje: 1. Liczenie poprzez sql count - brak możliwości pomyłki, dłuższy czas 2. Stworzenie zmiennej która będzie aktualizowana po każdej zmianie - możliwość pomyłki, krótszy czas (np kolumny `liczba ocen` w tabeli uczen) Powiedzmy, że mam w bazie danych tabelkę oceny i chciałbym zliczyć ilość ocen u ucznia. |
|
|
3.11.2017, 21:40:02
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
A co wpisujesz w COUNT?
bo najlepiej użyć Kod SELECT COUNT(1) FROM table
|
|
|
3.11.2017, 21:53:25
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (0%) |
|
|
|
4.11.2017, 10:36:25
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Ale tutaj nie ma nic więcej, może co najwyżej jeszcze skorzystać z funkcji PDO
Ale dostaniesz wynik po wykonaniu polecenia SELECT, UPDATE, INSERT czy DELETE. Czyli nie musisz odpytywać dwa razy bazy tylko po aby sprawdzić ile jest rekordów. COUNT(1) jest np. lepsze od COUNT(*) bo mniej obciąża procesor serwera. Ten post edytował Tomplus 4.11.2017, 10:40:12 |
|
|
4.11.2017, 11:07:21
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) |
Cytat 2. Stworzenie zmiennej która będzie aktualizowana po każdej zmianie - możliwość pomyłki, krótszy czas (np kolumny `liczba ocen` w tabeli uczen) To jest denormalizacja i stosuje się powszechnie w celach optymalizacyjnych. Wszystko zależy od rodzaju obliczeń, częstotliwości zmiany i tego jak czesto odczytujesz daną wartość. Przykładowo jeśli ktoś dodaje post na forum do tematu raz na kilka godzin, a wyświetlenie liczby postów w tematach odbywa się co parę minut, nie ma sensu tego za każdym razem obliczać. Sama kwestia implementacji i pomyłek. Po pierwsze możesz to wyrzucić poza logikę aplikacji i zrobić triggery w bazie, które będą aktualizować same wszystkie pola w zależności od zapytań idących do bazy. Po drugie nie zawsze musisz inkrementować wartość o jeden po akcji dodającej. Jeśli zapis jest rzadki, odczyt częsty i nie do końca chcesz tworzyć całą logikę związaną z inkrementacją, zawsze możesz puścić COUNT po stworzeniu rekordu i zapisać tę wartość, co zwróci. |
|
|
4.11.2017, 11:51:48
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Widok zmaterializowany.... oh, wait. To mySQL
-------------------- |
|
|
4.11.2017, 17:44:13
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (0%) |
ok, dzięki za odpowiedzi
@Tomplus trochę źle zrozumiałem na początku |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 11:28 |