Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] kilka pytań
Forum PHP.pl > Forum > Bazy danych > MySQL
krystian_p
Jestem początkującym programistą. Mam zamiar stworzyć serwis, w którym będą tyciące materiałów dotyczących miast Polski. Na jedno miasto przypadnie średnio 5-10 artykułów... Taki ogrom informacji może niekorzystnie wpłynąć na pracę serwera.
Mam wiele materiałów dotyczących optymalizacji kodu PHP, jednak nie do końca znam się na stworzeniu kodu, dzięki któremu praca bazy danych będzie sprawniejsza. Przygotowałem zatem kilka przykładów i proszę Was, byście poradzili mi w jaki sposób mam przerobić dany kod, by serwis działał szybciej.


1. Chcę sprawdzić, czy istnieje rekord o 'id' równym liczbie 4:
Kod
$a = mysql_fetch_array(mysql_query("SELECT * FROM tabela WHERE id='4'"));
if($a['id'] == ''){ echo'brak'; } else{ ...


2. Chcę wyciągnąć kilka pól z danego rekordu:
Kod
$a = mysql_fetch_array(mysql_query("SELECT pole, pole2 FROM tabela WHERE id='$id'"));
echo $a['pole'];
echo $a['pole2'];


3. Chcę wyciągnąć tylko jedno pole z danego rekordu:
Kod
$a = mysql_fetch_array(mysql_query("SELECT pole FROM tabela WHERE id='$id'"));
echo $a['pole'];


4. Chcę policzyć, ile jest rekordów, w których 'pole' jest równe liczbie 4:
Kod
$a = mysql_result(mysql_query("SELECT COUNT(*) FROM tabela WHERE pole='4'"),'0');


5. Chcę stworzyć listę rekordów, w których 'pole' jest równe liczbie 4:
Kod
$a = mysql_query("SELECT * FROM tabela WHERE pole='4'");
while($r = mysql_fetch_array($a)){...



Tu się zaczyna problem. Czytałem o niejakich indexach. Jak się tworzy indexy w programie PHPMyAdmin dla danego pola? Jakie trzeba wysłać zapytania, żeby utworzyć te indexy? Jakich zapytań trzeba użyć, by skorzystać z indexów?

Ma to jakiś związek z tym, co jest poniżej (jest takie coś w PHPMyAdmin)?
Nazwa klucza Typ Moc Działanie Pole
PRIMARY PRIMARY 1 Edycja Usunięcie id


To jest dla mnie bardzo ważny kod, bo jeśli będzie np. 10.000 rekordów i będę chciał w szybki sposó wyciągnąć tylko 2 w liście to może wystąpić problem...


6. Chcę wyciągnąć id rekordu, w którym jest największy id:
Kod
$a = mysql_fetch_array(mysql_query("SELECT pole FROM tabela ORDER BY id DESC LIMIT 0,1"));


7. Chcę edytować wartość danego pola (np. 'pole2') w rekordach, w których 'pole' jest równe liczbie 4:
Kod
mysql_query("UPDATE tabela SET pole2='tekst' WHERE pole='4'");


tu chyba też kłamiają się indexy... Ta sama zasada będzie występować podczas usuwania rekordów z wyznaczonymi wartościami?

8. czy warto używać opcji NULL?
strona działa szybciej, jeśli w zapytaniu użyje się kodu:
pole IS NULL

czy, jeśli użyje się:
pole=''

no i przy okazji chciałbym wiedzieć, czy w kodzie PHP szybciej działa kod:
Kod
if($a <> '')...
czy
if($a != '')...



9. Dodatkowo chciałbym wiedzieć, czy warto przed includowaniem pliku sprawdzać, czy on w ogóle istnieje, czy lepiej, bo szybciej, użyć od razu takiego kodu:
@include('plik.php')


--
Nie prawda że jest czytelniej?

~kwiateusz
flv
zacznijmy od tego że null i '' to inne wartości, co do indeksów, nie stosuj ich tam gdzie wykonujesz często operacje modyfikujące(INSERT,UPDATE,REPLACE,DELETE etc.) bo dopisanie do indeksu to też dodatkowe obciążenie, z tych przykładów co podałeś to prędzej sobie zaszkodzisz, na pola id zwykle nie trzeba nakładać indeksu bo są to zazawyczaj klucze główne(no chyba ze to relacje do innej tabeli) i są już one otworzone. Polecam dokladne przejrzenie manuala mysql
http://dev.mysql.com/doc/refman/4.1/en/create-index.html
http://dev.mysql.com/doc/refman/4.1/en/mysql-indexes.html
Tutaj znajdziesz informacje na jakie kolumny zakladac indeksy, a takze jak to robic.
Między używaniem <> i != w php nie ma żadnej różnicy w szybkości, zresztą w mysql też tyle że != nie jest w standardzie ANSI SQL. Poszukaj w manualu czy w jakiejś książce dodatklowych informacji nt. optymalizacji baz danych bo w jednym temacie raczej ciężko dowiedzieć sie coś nt. tak obszernego zagadnienia. A co do file_exists to sprawdzanie wydaje sie niepotrzebne chociaż i tak na takich zmianach zbyt wiele nie zyskasz ; )
krystian_p
czyli sugerujesz, że moje kody są dobre?
że na pewno nie spowalniają systemu?
kiedyś ktoś mi mówił, że takimi kodami jedynie obciążam serwer...

niebardzo znam angielski, znasz może jakieś pomoce, ale polskie?
flv
A gdzie ja tak napisałem? smile.gif Twierdze raczej odwrotnie. Oprócz tego co napisałem to można jeszcze przyczepić się do tego:
Kod
$a = mysql_fetch_array(mysql_query("SELECT pole, pole2 FROM tabela WHERE id='$id'"));

i teraz jeśli mysql_fetch_array wsadzisz w pętle to przy każdym przejściu pętli będzie wykonywane zapytanie, przykładowo jeśli będziesz 'wyjmował' 100 rekordów to też 100 razy zostanie wykonane zapytanie.
Kod
$sql = mysql_query("SELECT pole, pole2 FROM tabela WHERE id='$id'");
$a = mysql_fetch_array($sql);

Pozmieniaj to na taką strukture. Tak wogóle to chyba najwyższa pora nauczyć sie angielskiego ; )
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-2024 Invision Power Services, Inc.