Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Pytanie optymalizacyjne, Co będzie działało szybciej?
phpowiec2
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


Witam,

Co będzie działało szybciej w praktyce: pobranie dwóch pól z tabeli np. typ, np. "strona" oraz id, np. "1" i ich pobranie czy może jedno pole, np. strona/1, a następnie rozdzielenie w PHP (np. funkcją split)? Co będzie szybsze? Tylko nie piszcie "Zrób testy to się dowiesz". Może ktoś już miał podobny problem i robił testy lub ma większe doświadczenie. Myślę, że przy większej bazie, np. z milionem rekordów może to mieć duże znaczenie.

Pozdrawiam

Ten post edytował phpowiec2 26.05.2009, 17:49:47
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Tylko nie piszcie "Zrób testy to się dowiesz".

A właśnie napiszę - przyda Ci się microtime" title="Zobacz w manualu PHP" target="_manual

Cytat
Myślę, że przy większej bazie, np. z milionem rekordów może to mieć duże znaczenie.

Owszem - poszukiwanie wg tych pól i rozbrajanie ich w SELECT byłoby bezsensem...
Go to the top of the page
+Quote Post
phpowiec2
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


Robienie testów jest trochę pracochłonne ale może się opłacić w ostatecznym rozrachunku:) Myślałem właśnie o użyciu microtime.

Cytat
Owszem - poszukiwanie wg tych pól i rozbrajanie ich w SELECT byłoby bezsensem...
- nie za bardzo rozumiem co miałeś tutaj na myśli, tzn. że bez robienia testów jesteś za splitem?

Ten post edytował phpowiec2 26.05.2009, 19:05:34
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Robienie testów jest trochę pracochłonne

bez pracy nie ma kołaczy

Cytat
- nie za bardzo rozumiem co miałeś tutaj na myśli, tzn. że bez robienia testów jesteś za splitem?

Nie - jestem za umieszczeniem danych w osobnych kolumnach. Przy splicie wyciąganie danych przez zapytanie byłoby bardziej zasobożerne.
Go to the top of the page
+Quote Post
kkuba
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 13
Dołączył: 6.07.2008
Skąd: Nowy Sącz

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


@phpowiec2: czy Tobie przypadkiem nie chodzi o coś takiego

  1. SELECT (`id`, `strona`) FROM `typ` WHERE (...)


?
Go to the top of the page
+Quote Post
phpowiec2
post
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


Cytat
SELECT (`id`, `strona`) FROM `typ` WHERE (...)


bardziej o coś takiego

SELECT (`id`, `typ`) FROM `tabela` WHERE (...)

lub druga opcja

SELECT (`id_typ`) FROM `tabela` WHERE (...)

i pobraną wartość (w formie np. "strona-1") dzieliłbym sobie na zmienne poprzez split

Ten post edytował phpowiec2 26.05.2009, 20:21:17
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A po grzyba to dzielic w php, skoro mozesz miec pobrane w osobnych polach?
I po grzyba trzymac polaczone w bazie -co z tego bedziesz mial?
Jak bedziesz chcial jakies zlaczenie, warunek w bazie zrobic na tych polach to ja zajedziesz.
A pobranie ich osobno i tak jest szybkie, a tylko sobie komplikujesz niepotrzebnie system.

Cytat
Może ktoś już miał podobny problem i robił testy lub ma większe doświadczenie.

No raczej nikt nie wpadl na tak glupi pomysl.

Ten post edytował dr_bonzo 26.05.2009, 20:25:14
Go to the top of the page
+Quote Post
phpowiec2
post
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


Po takiego grzyba, że zapytania do bazy optymalizuje się m. in. w ten sposób, że pobiera się jak najmniejszą liczbę pól przy zapytaniu. Przy malutkiej bazie i małej ilości zapytań oczywiście nie ma sensu się bawić w takie rzeczy. Sytuacja komplikuje się przy dużej bazie i ogromnej ilości zapytań.

Cytat
Jak bedziesz chcial jakies zlaczenie, warunek w bazie zrobic na tych polach to ja zajedziesz.


Przecież można trzymać dane też w polach osobno (na wypadek skorzystania), tylko z nich nie korzystać w aplikacji, wiadomo.

Ten post edytował phpowiec2 26.05.2009, 20:47:09
Go to the top of the page
+Quote Post
cojack
post
Post #9





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


Że tak powiem, w jednej kolumnie trzymam jedne dane. Jak miałbym później rozdzielać w php, to już bym wolał sobie to w pliku trzymać, bo po co wtedy baza?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




to zrob ten test a oswiecisz nas wszystkich. Zajmie ci to 10 minut wlacznie z wlozeniem miliona rekordow do bazy (choc proces generowania miliona rekordow moze potrwac dluzej niz 10 minut)

Ja osobiscie jestem za dwoma polami. zdecydowanie latwiej wowczas przeprowadza sie wszelkie operacje na bazie - uwierz na slowo.
Go to the top of the page
+Quote Post
phpowiec2
post
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


Podobne rozwiązanie widziałem w Drupalu i stąd moje dywagacje na ten temat.
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A czy tam nie jest przypadkiem coś w stylu cache'u mapowań rewrite zapisanych w celu szybszego odczytu?
Go to the top of the page
+Quote Post
phpowiec2
post
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2009

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


też ale nie tylko
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
Po takiego grzyba, że zapytania do bazy optymalizuje się m. in. w ten sposób, że pobiera się jak najmniejszą liczbę pól przy zapytaniu

Pobiera sie taka liczbe pol jaka potem potrzebujesz.
Nigdzie tu nie mowia zebys "trzymal caly rekord w jednym polu".
I wez te testy przeprowadz, 4h tylko gadasz zamiast to dawno zrobic.
Go to the top of the page
+Quote Post
rzymek01
post
Post #15





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


wyobraź sobie, że chcesz wyszukać rekord typ:strona o id=15, ciekawe ile to by zajęło czasu... (i napisanie jeszcze dobrego zapytania, które to wszystko rozdzieli i porówna) :/
Go to the top of the page
+Quote Post
Roly
post
Post #16





Grupa: Zarejestrowani
Postów: 55
Pomógł: 7
Dołączył: 8.12.2003
Skąd: Andrychów

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


A ja dodam tylko że powinno być w osobnych polach. Bo jak wyniki z teorii baz danych błędne są tabele które w polach zawierają dane wielowartościowe.
Go to the top of the page
+Quote Post
tomahawk
post
Post #17





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.02.2007

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


Zrób w osobnych kolumnach...

Bo ostatecznie okaże się że ze splitem nie jest wcale wydajniej (bolączką bazy jest wyszukiwanie a nie pobieranie)...

A jak będzie wydajniej to róznica będzie taka że musiałbys mieć aplikację z milionami requestów żeby miało to jakies znaczenie....
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 23:25