Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dużo rekordów w tabeli a szybkość działania
Rastman
post 30.01.2005, 12:14:38
Post #1





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


Mam taki pytanko odnośnie bazki w Mysql. Na razie wszystko działa ok, ale mam jedna tabelkę(12 pól), która dość szybko się zapełnia nowymi rekordami. Przewiduję, że za kilka miesięcy może być kilkaset tysięcy rekordów, może milion. Czy taka liczba rekordów wpłynmie znacząco na szybkość przeszukiwaniaq bazki? Bo mam pomysł, żeby podzielić ją na kilka bliźniaczych, ale nie wiem czy jest sens. moze ktoś zna odpowiedź


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
sobstel
post 30.01.2005, 13:06:05
Post #2





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


z dobrze założonymi indeksami nie powinno być tak źle, ale oczywiście czym mniej rekordów w bazie tym lepiej (czyt. szybciej). jesli częśc danych ulega "przedawnieniu", tzn. np stare zamówienia czy coś w tym rodzaju, czy też po prostu dane z których coraz rzadziej korzystamy najlepiej wywalić do innej tabeli...


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Rastman
post 2.02.2005, 00:51:40
Post #3





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


właśnie problem w tym, że wszystkie rekordy w tej tabeli będą aktualne, będą podlegać conajwyżej modyfikacji. zastanawiam się czy możnaby stworzyć kilka tabel bliźniaczych, podzielić ej odpowiednio na kategorie, nie wiem tylko czy to eleganckie, no i trochę mniej funkcjonalne


--------------------
Go to the top of the page
+Quote Post
popbart
post 2.02.2005, 08:50:21
Post #4





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


Aby być przygotowanym na ewentualne kłopoty,
najlepiej stwórz sobie kopie tej bazy i zapełnij ją do ok 2 milionów.
Następnie wykonaj testy a dowiesz się czy masz dobre index'y winksmiley.jpg


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
sobstel
post 2.02.2005, 09:24:12
Post #5





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(Rastman @ 2005-02-02 00:51:40)
właśnie problem w tym, że wszystkie rekordy w tej tabeli będą aktualne, będą podlegać conajwyżej modyfikacji. zastanawiam się czy możnaby stworzyć kilka tabel bliźniaczych, podzielić ej odpowiednio na kategorie, nie wiem tylko czy to eleganckie, no i trochę mniej funkcjonalne


1. założenie indeksów to podstawa. jesli dane są ułożone według konkretnej kolumny np.daty możesz co jakis czas wykonywać ALTER TABLE table ORDER BY kolumna DESC

2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika.


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
popbart
post 2.02.2005, 09:45:52
Post #6





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


Cytat
ALTER TABLE table ORDER BY kolumna DESC

Co to znaczy?
Cytat
2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika.

No nie wiem.
Jeżeli będzie chciał wyszukiwać dane we wszystkich tabelach,
to używanie UNION dla kilku tabel będzie małą katastrofą.


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
sobstel
post 2.02.2005, 10:01:49
Post #7





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(popbart @ 2005-02-02 09:45:52)
Cytat
ALTER TABLE table ORDER BY kolumna DESC

Co to znaczy?
Cytat
2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika.

No nie wiem.
Jeżeli będzie chciał wyszukiwać dane we wszystkich tabelach,
to używanie UNION dla kilku tabel będzie małą katastrofą.

1. porzadkuje rekordy w bazie wedlug kolumny kolumna

2. jak napisalem : "jesli to nie przeszkodzi w formułowaniu zapytań"


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
popbart
post 2.02.2005, 13:28:40
Post #8





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


Cytat
1. porzadkuje rekordy w bazie wedlug kolumny kolumna

Wiem, chodziło mi jaki ma to związek z wydajnością.
Cytat
2. jak napisalem : "jesli to nie przeszkodzi w formułowaniu zapytań"

Tu nie chodzi o formułowanie zapytań. Chcąc cokolwiek wyszukać, musisz zrobić coś w rodzaju:
  1. SELECT *
  2. FROM (SELECT *
  3. FROM tabela1 UNION ALL SELECT *
  4. FROM tabela2 UNION ALL SELECT *
  5. FROM tabela3 ....itd) AS temp WHERE pole='costam'

Jak wiesz podzapytanie from buduje tabelę tymczasową,
więc moim zdaniem lepiej trzymać wszystko w jednej tabeli z dobrze założonymi index'ami.


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
Rastman
post 17.02.2005, 23:10:18
Post #9





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


no i tu pojawia się problem, ponieważ wykonanie zapytania dla 700 000 rekordó trwa kilka minut lokalnie, w przypadku zwróconych kilku, kilkunastu rekordów kilkadziesiąt sekund, ale z bliźniaczymi tabrlami to też niedobry pomysł. Ale przeciez istnieją duże serwisy oparte o mysql'a, więc jakies optymalne rozwiązanie musi istnieć
pozdrawiam


--------------------
Go to the top of the page
+Quote Post
FiDO
post 18.02.2005, 02:14:36
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


To moze napisz cos wiecej o danych, ktore przechowujesz.
Podaj strukture tabeli i zapytanie(a), ktore tak muli(ą).


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Rastman
post 18.02.2005, 19:07:48
Post #11





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


są to dane firm, ale mój problem chyba został rozwiązany przez zastosowanie indeksów. To chyba optymalne rozwiązanie. pozdrawiam


--------------------
Go to the top of the page
+Quote Post
sobstel
post 19.02.2005, 01:14:08
Post #12





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(popbart @ 2005-02-02 13:28:40)
Cytat
1. porzadkuje rekordy w bazie wedlug kolumny kolumna

Wiem, chodziło mi jaki ma to związek z wydajnością.

cytując manuala This option is mainly useful when you know that you are mostly going to query the rows in a certain order; by using this option after big changes to the table, you might be able to get higher performance.

innymi słowy, mysql szybciej wyszuka rekordy z tabeli jesli sa uporzadkowane tak jak w zapytaniu.


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
NuLL
post 19.02.2005, 01:39:26
Post #13





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Sorki za [OT]W Sieci można znaleść artykuły opisujące przypadki kiedy MysQL działał z 5 miliardami(exclamation.gif!) rekordów tabeli(!) -- pogoogluj troche smile.gif[/OT]


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Bakus
post 20.02.2005, 08:19:29
Post #14


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Z mojego doświadczenia wynika, że dobrze opracowane tabele zawierające bardzo duże ilości danych znacznie lepiej działają niż źle opracowane tabele z małą ilością rekordów...
Warto wykonać na tabeli polecenie:
  1. SELECT *
  2. FROM `tabela` PROCEDURE ANALYSE ( )

by zobaczyć jak silnik MySQLa ułożył dane w takiej tabeli (w phpMyAdmin jest to funkcja "Propozycja struktury tabeli" dostępna pod listą pól tabeli).


--------------------
Powrót do przeszłości :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:03