Jump to content
php.lv forumi

Foreach optimizācija


DarkSide

Recommended Posts

varbūt ka var, bet vēl pavasarī mysql storētās procedūras bija diezgan vājas, tik brīvi kā pl/sql rakstīt nevarēsi.
Vot, vot - paskatījos iekš tā iepostotā linka - nav vērts ķēpāties. Pagaidām izskatās, ka MySQL stored procedures vēl arvien ir tikai lieka laika tērēšana un ķēpa.

By the way - kāda ir pieredze darbā ar šādu komplektu: Windows+Apache2+PHP5+Oracle10g? Oracle10g man šķiet arī izlaida freeware produktu ar kautkādiem ierobežojumiem (šķiet <2Gb datubāzes izmērs vai kautkas tāds), varbūt nākotnē tomēr tādus nopietnākus projektus taisīt uz Oracle nevis MySQL bāzēm? Kā PHP ar Oracle sadzīvo?

Link to comment
Share on other sites

  • Replies 39
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Principā jau vēl eksistē arī šītāds variants:

 

 

Paprieksh izpildi tikai vienu company un orders attlasishanu

 

SELECT c.cname, o.oname,

FROM contract c

LEFT JOIN orders o ON (c.cid=o.cid AND o.is_deleted='F')

WHERE c.is_deleted='F'

 

peec tam cikla , katram attlasi vajadzigos orderus.

 

select w.wname on works where o.oid=w.oid AND w.is_deleted='F'

 

Pieaugs queriju skaits, bet pamatigi samazinasies MB skaits, kas tiek dzenaats shurputurpu...

Edited by Gundars
Link to comment
Share on other sites

U jā, ja panesās topiks par DB, tad silti iesaku Postgre.

Arī ideja par atdalīto SQL nav slikta... ja vien pirmajam nav daudz ieraksti (<20)... citādi tas viss nonāks pie servera overloada... SQL serverim dažreiz ir vieglāk izdalīt 100Mb kluci, nekā 100 reizes pa 1Mb

 

Nu tur ir jāskatās QueryAnalyzer... cik tavs SQL `izmaksā` (ir tāds termins RDBMS: `CPU Cost`)...

Link to comment
Share on other sites

Principā jau vēl eksistē arī šītāds variants: Paprieksh izpildi tikai vienu company un orders attlasishanu peec tam cikla , katram attlasi vajadzigos orderus. Pieaugs queriju skaits, bet pamatigi samazinasies MB skaits, kas tiek dzenaats shurputurpu...
Tāds man bija pats pirmais variants, kādu iesākumā biju uzkodējis. Baigi forši var DB serveri sēdināt ar ~16'000 selectiem kādu 10-20sek laikā :)

 

 

U jā, ja panesās topiks par DB, tad silti iesaku Postgre.
Kautkā tas Postgre mani neaizķēra. Biju uzinstalējis, neko nemācēju izdarīt (neesmu jau galīgs iesācējs, bet...) un tik pat ātri noinstalēju nost :)
Nu tur ir jāskatās QueryAnalyzer... cik tavs SQL `izmaksā` (ir tāds termins RDBMS: `CPU Cost`)...
Zinu kas ir CPU cost, taču vai kautkur ir pieejams freeware kautkāds zofts, kas analizētu MySQLa selectus? Vienīgais, ko šad tad ir gadījies izmantot ir EXPLAIN SELECT... un tas nedod CPU cost, bet gan tikai dažus parametrus, kuru tabulu ar kuru salinko un kādus indeksus izmantos, bet CPU cost kā tādu acīmredzot MySQL nemaz nerēķina?
Link to comment
Share on other sites

postgres ir spēcīgs, ja māki viņu izmantot un galvenais - ja tev to vajag.

par mysql nepiemērotību kaut kur lasīju diskusiju un izrādās, ka yahoo, wiki u.c. lielie sēž tieši uz mysql. varbūt pa šo laiku situācija ir mainījusies, neņemos spriest

Link to comment
Share on other sites

2,3) Nu es jau to arī tāpēc daru ar PHP ar tiem nežēlīgajiem foreachiem.
Nepareiza pieeja.. jādara būtu apmēram šādi:

 

$result = mysql_query("... '');

while($row = mysql_fetch_assoc($result)) {

$total[params1][params2] += $row[value];

$total[params1] += $row[value];

$total += $row[value];

}

 

 

Kur tu idejiski iegusti vairākdimensionālu masīvu (protams var dalīt atsevišķos varibļos), kurā var sagāzt katras kategorijas countus nu vai kaut kā tā..

 

Šādi tev nav nepieciešams ģenerēt gatavus masīvus un cikloties tiem cauri bet gan tu pa taisno no SQL resulseta jau vāc sev nepieciešamos skaitļus.

 

Protams var uzrakstīt arī COUNT() kverijus SQL db serverim.

 

Par memory_limit, man uz izstrādes vides (Win+Apache+PHP4) memory_limit=8M un viss izgriežas (pat ja Apache process TaskManager var redzēt, ka noēd brīžiem 200Mb RAM), bet uz produkcijas vides (Linux+Apache+PHP4) memory_limit=50M un procesi kas apēd vairāk par ~50Mb RAM neizgriežas...

Kā tā var būt? Vai tiešām sanāk tā, ka Windows tas PHP parametrs ir pie pak..ļas, bet Linuxam nē???

Šķiet ka līdz kādai 5.1 versijai windows buildi ir bez eneiblota memory limita..

Link to comment
Share on other sites


×
×
  • Create New...