Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Pytanie optymalizacyjne
Forum PHP.pl > Forum > Przedszkole
phpowiec2
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
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...
phpowiec2
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
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.
kkuba
@phpowiec2: czy Tobie przypadkiem nie chodzi o coś takiego

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


?
phpowiec2
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
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
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
Ż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
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
Podobne rozwiązanie widziałem w Drupalu i stąd moje dywagacje na ten temat.
erix
A czy tam nie jest przypadkiem coś w stylu cache'u mapowań rewrite zapisanych w celu szybszego odczytu?
phpowiec2
też ale nie tylko
dr_bonzo
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
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.