Diskuze: Snížení SQL dotazu

PHP PHP Snížení SQL dotazu American English version English version

Avatar
katrincsak
Člen
Avatar
katrincsak:

Zdravím,

potřeboval bych pomoct se snížením SQL dotazu u kterého jsou data vždy jinak řazena a selectuju taktéž trochu jiná data.

  • Není nijak důležitý, ale zde to začíná a na názvy jako tt = tento týden, mt = minulý týden je práce předešlého programátora.
// VIDEA
$videaTentoTyden        = $DataSQL->selectZebricek('st,tt', 'tt');
$videaMinulyTyden       = $DataSQL->selectZebricek('st,mt', 'mt');
$videaZa14Dni           = $DataSQL->selectZebricek('mt,tt', 'tt+mt');
$videaCelkove           = $DataSQL->selectZebricek('st,mt', 'st');
//HUDBA
// DataSQL soubor.
public function selectZebricek($select, $order){
 try{
  $data = Db::dotazVsechny("SELECT id,newrew,skuprew,datum,skup,jmeno,vlozil,styl,poznamka,url,".$select.",youtube_kod
  FROM videos ORDER BY ".$order." DESC LIMIT 50",
  array());
  return $data;
 } catch (PDOException $e) {
  exit;
 }
}

Jak je patrné, tak doplňuji $select a $order, to abych nemusel dělat tento script 8x a šetřil si prostor. Jak jsem uvedl jedná se tedy o 8 těchto podobných dotazů kvůli řazení VIDEA a stejně přijdou i HUDBA.
Ještě pak data samozřejmě zpracovávám, ale to už není tolik důležitý. Důležitý je, že tohle bude spouštět CRON každých 30 minut cca, ten vygeneruje html kod a již nedochází k opakovanému načítání z DB při několiak tisícové návštěvnosti denně.

A tak by mě zajímalo zda existuje nějaká funkce, nástroj, způsob co by dokázalo zpracovat v jednom dotazu a třeba i do vícerozměrného pole to je fuk. V tomto případě mi nepomůže funkce "beginTransaction".

Děkuji mnohokrát.

Editováno 23. ledna 10:41
 
Odpovědět 23. ledna 10:40
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na katrincsak
Tonda Kozák:

Pokud jsem to dobře pochopil a ve $videaCelkove máš všechny záznamy, tak to přece poté můžeš v PHP projet a podle data se rozhodnout, do které kategorie/kategorií to patří, ne?

 
Nahoru Odpovědět 23. ledna 18:28
Avatar
Richard
Člen
Avatar
Richard:

Základní věc, co znamená

"snížení sql dotazu"?

Snížení počtu sql dotazů, snížení procesorového času? Snížení něčeho jiného?

Druhá věc, ta věta:

"A tak by mě zajímalo zda existuje nějaká funkce, nástroj, způsob co by dokázalo zpracovat v jednom dotazu a třeba i do vícerozměrného pole to je fuk."

Nedává smysl, nerozumím tomu na co se ptáš. Chceš aby to bylo zpracované v jednom sql dotazu? A proč vůbec?

Nahoru Odpovědět  -1 23. ledna 20:33
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Pavel
Redaktor
Avatar
Odpovídá na katrincsak
Pavel:

Ahoj,
Obecne je prave DB na to delana nez PHP.

Jinak co se tyce odpovedi:
Jelikoz mas poslednich 50zaznamu, tak pokud si je nechas z DB seradit od nejnovejsoho po nejstarsi (tech 50) tak pak v PHP je muzes tridit podle data: SQL vydledek datum (podlednich 7 dni, predeslich 7 dni, poslednich 14 dni a za mesic).

Ale jak sem psal vys, db je na to spis delana nez php.

Pavel

Editováno 25. ledna 11:44
 
Nahoru Odpovědět 25. ledna 11:43
Avatar
katrincsak
Člen
Avatar
Odpovídá na Tonda Kozák
katrincsak:

To by šlo také, ale dat je spousta a to už možná je rychlejší vytahat 8x 50 dat. Je pravda že proces proběhne pod 1s, ale nelíbí se mi to. Popravdě řečeno, já bych uložil unix time a kašlal na nějaký zápis již hotového výpočtu, ale na tyto zásadní změny nemám zatím takový časový prostor. Jednalo by se o úpravu spousty dat.

 
Nahoru Odpovědět 25. ledna 16:49
Avatar
katrincsak
Člen
Avatar
Odpovídá na Richard
katrincsak:

Vím, že MySQL má také omezený počet dotazů v jeden moment, tak proto uvažuji nad počtem dotazů. Proces je hotový sice v mžiku okamžiku, ale tak rád dělám nenáročný postupy :)

 
Nahoru Odpovědět 25. ledna 16:53
Avatar
katrincsak
Člen
Avatar
Odpovídá na Pavel
katrincsak:

To by šlo, ale to by ta struktura nesměla být tak hloupě udělaná, ale vím že MySQL toho umí taky velkou spoustu. Tak proto jsem se ptal a na víc když se dělá opakovaný dotaz, tak se např. beginTransaction používá a tak mě zajímalo zda je něco i na toto, že by to vlastně nebylo 8 dotazů.

 
Nahoru Odpovědět 25. ledna 16:55
Avatar
Richard
Člen
Avatar
Odpovídá na katrincsak
Richard:

Výkon mysql je omezený výkonem hw. Na běžným serverovým hw není problém tisíce dotazů za sekundu. Je z hlediska výkonu úplně jedno jestli na db pošleš 1, 5, nebo 30 sql dotazů, protože to jsou dotazy jednoduchý.

Vůbec bych to neřešil :-)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +5 25. ledna 17:59
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.