phpowiec2
26.05.2009, 17:48:00
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
erix
26.05.2009, 18:45:16
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="_manualCytat
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...
phpowiec2
26.05.2009, 18:53:19
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?
erix
26.05.2009, 20:06:01
Cytat
Robienie testów jest trochę pracochłonne
bez pracy nie ma kołaczyCytat
- 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.
kkuba
26.05.2009, 20:12:04
@phpowiec2: czy Tobie przypadkiem nie chodzi o coś takiego
SELECT (`id`, `strona`) FROM `typ` WHERE (...)
?
phpowiec2
26.05.2009, 20:19:33
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
dr_bonzo
26.05.2009, 20:22:41
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.
phpowiec2
26.05.2009, 20:42:34
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.
cojack
26.05.2009, 20:48:32
Ż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?
nospor
26.05.2009, 20:49:21
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.
phpowiec2
26.05.2009, 20:51:52
Podobne rozwiązanie widziałem w Drupalu i stąd moje dywagacje na ten temat.
erix
26.05.2009, 20:53:03
A czy tam nie jest przypadkiem coś w stylu cache'u mapowań rewrite zapisanych w celu szybszego odczytu?
phpowiec2
26.05.2009, 21:01:43
też ale nie tylko
dr_bonzo
26.05.2009, 21:43:15
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.
rzymek01
26.05.2009, 21:56:01
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) :/
Roly
26.05.2009, 21:59:23
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.
tomahawk
26.05.2009, 22:12:17
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....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.