Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeciazanie bazy danych
Forum PHP.pl > Forum > Bazy danych > MySQL
andszym
Otrzymałem informacje od firmy hostingowej że kwerenda:
select * from tabela where id='1' order by RAND()
przeciaza im baze danych.

Czy ktoś móglby mi podpowiedziec jak to zastąpić, żeby nie przeciazalo im baz danych?

Z gory dziekuje za pomoc.
Andrzej
akubiczek
Wiesz... nie piszesz nic o tym ile masz danych, jakiego typu, do czego potrzebne ci jest wyciąganie w losowej kolejności... Trudno wróżyć.

Ale jeżeli masz tam mało rekordów, to czym prędzej zmień tą firmę hostingową na jakąś normalną smile.gif
John
A czy nie możesz po prostu losować tego co potrzebujesz php'ie i co zapytania wstawić konkretną zmienną ?
Albitos
Z tego co wiem, RAND() zostanie wykonane dla każdego rekordu w bazie, a potem szereguje je w kolejności. Tam nie powinno być czasem LIMIT 1?
SongoQ
Ja mysle ze to jest tak ze robisz randa zwracasz wszystki rekordy a nastepnie wyciagasz 1. Tak jak pisal @Albitos. Nie dziw sie ze admini maja pretensje takie rzeczy sa niewybaczalne.
andszym
LIMIT 1 da mi tylko jeden rekord.

Rekordów jest niewiele - około 50. Może przykład zle napisalem.

Powiedzmy ze mam tabele "DOM". Każdy rekord tej tabeli ma 300 pól (mniej sie nie da). Jednym z pól w tej tabeli jest pole "kondygnacje".
Chce aby na stronie wyświetlały sie wszystkie domy jednokondygnacyjne, ale w losowej kolejności po to żeby każdy dom miał taką samą szanse na obejrzenie przez użytkownika.

Biorę wiec kwerende:
select * from DOM where kondygnacje='1' order by RAND();

Otrzymuje wynik html:

1)DOM CHABROWY
kondygnacje: 1
powierzchnia: 240 m2
dach: jednospadowy

2)DOM KURANT
kondygnacje: 2
powierzchnia: 210 m2
dach: mansardowy

3)...

itp. itd.

Czy takie wywołanie kwerendy przy tak malej liczbie rekordów może przeciążyć bazę danych?
adamx
  1. <?php
  2. $offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `produkty` ");
  3. $offset_row = mysql_fetch_object( $offset_result ); 
  4. $offset = $offset_row->offset;
  5. $dane['res_produkty'] = mysql_query( " SELECT * FROM `produkty` where ".$wh." LIMIT $offset, 6 " );
  6. ?>

praktycznie wogole nie obciaza bazy.. a losuje prawie tak samo ;]
osiris
A masz utworzone indeksy dla pol wg ktorych przeszukujesz tabele?

Cytat(andszym @ 3.08.2007, 23:17:26 ) *
Powiedzmy ze mam tabele "DOM". Każdy rekord tej tabeli ma 300 pól (mniej sie nie da). Jednym z pól w tej tabeli jest pole "kondygnacje".

Wydaje mi sie jednak ze glowna przyczyna Twoich problemow jest duza ilosc pol w tej tabeli.
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.