Paprastai Debian, parestartavus mysql paleidžia repaire skriptą. Jeigu DB nedidelė - tu jo nepastebėsi, tačiau jeigu db didelė - skriptas sukasi ilgai ir sulėtina db veikimą. Galima išjungti šį tikrinaimą, arba tiesiog palaukti kol jis padarys savo darbą.

panašu į firewall

Jeigu antros lentelės pavadinimas DėžutėsSaldainiai, tai užklausa bus

SELECT Dėžutės.D pavadinimas, Saldainiai.Sald. pavadinimas,  (Dėžutės.gam įkainis+(Saldainiai.v kaina *Dėžutės.Sald. v.skaičiu)) AS Dėžutės kaina
FROM 
DėžutėsSaldainiai 
JOIN Dėžutės ON (DėžutėsSaldainiai.Dėžutės ID =Dėžutės.Dėžutės ID)
JOIN Saldainiai ON (DėžutėsSaldainiai.Sald. ID =Saldainiai.Sald. ID)

nerekomenduočiau :)

čia tik apėjimas, kurio pasekmė gali būti temporary tables :) ir didelis IO

tai tavo ataskaitos eilutės nr. Išvedimas priklauso nuo priemonių.

Su php

<?php

$result = mysql_query('/**tavo query su ORDER BY suma DESC/');
$i = 0;
while ($row=mysql_fetch_object($result) && (++$i))     
    echo $row->Vardas . '/' . $row->Suma . '/' . $i . "\n";

per mysql užklausą, tikrai neverta mėginti spęsti šios užduoties ;)

Exploder wrote:

Sveiki! Kokių būtų žinote optimizuoti UPDATE užklausas? Na tarkim kaip updatint dvi lentas viena užklausa ir pan...

Ką tu nori optimizuoti ? Kas bus optimaliau, jeigu vietoj dviejų užklausų, sugrūsi viską į vieną?

7

(9 replies, posted in PHP)

nerfmarius wrote:

Tai va, jei trumpai, turiu sukūręs funkciją

function kiek_komentaru($naujienosid)
{
    $komentarai = mysql_query("SELECT * FROM komentarai WHERE naujienosid=$naujienosid");
    $kiek_komentaru = mysql_num_rows($komentarai);
    echo "$kiek_komentaru";
}

šį komentarų skaičių noriu atvaizduoti kitoje funkcijoje kuri spauzdins naujienas

Tą skaičių atspauzdina, bet ne toje vietoje kur noriu, norėčiau, kad Komentarų ( Spauzdintų čia ). Ką ne taip užrašiau gal kas matote? Nes aš jau nieko nebematau :D

Nesąmonė Selectinti visus duomenys, kad panaudotum mysql_num_rows. Tam skirta mysql COUNT() funkcija.

Ramex wrote:

xcache ir memcache. kokios realios naudos jie suteikia? vėlgi, kaip tai įtakoja kodo rašymą?

xcache - php opcode kešeris / optimizeris. jis kešuoja tavo php skriptus prieš tai paoptimizavęs. Taipogi jame gali saugoti ir savo objektus, tarkim dažnos užklausos rezultatą. Jeigu apache su mod_php -  duomenys  saugomi apache shared memory. Perkrovus apache, kešas dingsta. jeigu turi du web serverius, tai kiekvienas turės atskirą kešą. Kiek pamenu, jis veikia jeigu php kraunamas per mod_php arba fastcgi. Kitu atveju (cgi, suphp) jis neveikia, nes kiekvienai užklausai paleidžiamas atskiras procesas kuris nesidalina kešo atmintimi.

memcache - tai tinklinis cache serveris. Jis veikia nepriklausomai nuo web serverio. Jis pasiekiamas per tinklą. Jis naudojamas tuo atveju, jeigu daugiau nei vienas web serveris arba daugiau nei vienas memcache :) 

Vienu ir kitu atveju, tavo php scriptai turi žinoti, ką ir kur kešuoti. Tarkim kažkokios sql užklausos rezultatą.

Ramex wrote:

Sphinx Search. apie šį daiktą beveik išvis nieko nežinau, tik suprantu, kad jis skirtas atlikti full-text paieškai duomenų bazėje. ar tai reikalauja kodo pataisymų? ar duoda realią naudą lyginant su standartinėm MySQL galimybėm.

Sphinx Search gėris palyginus su mysql full-text. Jis leidžiamas kaip atskiras serveris. Full-text paieškas atlieka žymiai greičiau. Dažnai naudojamas, kai nėra galimybės naudoti myIsam dėl jo table locku. Norint naudoti, reiks keisti php skriptus, kad jie mokėtu ieškoti Sphinx. Naujas sphins, palaiko mysql protokolą, taigi galima jungtis su standartiniu mysql klientu.
jo minusai - didelis IO perindeksavimo metu. Pakeitus tekstą db, sphinx apie tai nesužinos kol pilnai neperindeksuosi. nauji duomenys į sphinx patenka, tik paleidus indeksavimą.

minde wrote:

MySQL'e tam yra VIEW'ai arba MEMORY/HEAP duomenų saugojimo variklį.

Bet pirmiausia tai aišku yra analizė - kodėl tiek ilgai užtrunka duomenų paėmimas iš DB, nes tai tik rodo, kad yra jau kažkas blogai su duomenų struktrom / užklausom.

Kešavimas dažniausiai naudojamas, tam kad nukrauti užklausas nuo DB. Taigi kešuoti į tą pačią db nelogiška. Taipogi reikia kurti kešo valdymą (trynimą objektų kurie expirinosi). MEMORY/HEAP saugojimo varikliai - apriboti ramu (arba db serverio nustatymais), taigi reikia rūpintis, kad lentelėse neprisikauptu per daug duomenų. MEMORY/HEAP - tai tas pats myisam tik tiek, kad duomenys saugomi rame. Tokios lentelės paveldi visus myisam minusus (table lock'us). Dažnai tokiose lentelėse atliekamos ne tik select užklausos, bet ir update / delete, todėl atsiremiama į table lock'us.