NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Snížení SQL dotazu

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
katrincsak
Člen
Avatar
katrincsak:23.1.2016 10:40

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.1.2016 10:41
 
Odpovědět
23.1.2016 10:40
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na katrincsak
Tonda Kozák:23.1.2016 18:28

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.1.2016 18:28
Avatar
Richard
Člen
Avatar
Richard:23.1.2016 20:33

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
23.1.2016 20:33
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Pavel
Tvůrce
Avatar
Odpovídá na katrincsak
Pavel:25.1.2016 11:43

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.1.2016 11:44
 
Nahoru Odpovědět
25.1.2016 11:43
Avatar
katrincsak
Člen
Avatar
Odpovídá na Tonda Kozák
katrincsak:25.1.2016 16:49

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.1.2016 16:49
Avatar
katrincsak
Člen
Avatar
Odpovídá na Richard
katrincsak:25.1.2016 16:53

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.1.2016 16:53
Avatar
katrincsak
Člen
Avatar
Odpovídá na Pavel
katrincsak:25.1.2016 16:55

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.1.2016 16:55
Avatar
Richard
Člen
Avatar
Odpovídá na katrincsak
Richard:25.1.2016 17:59

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
25.1.2016 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.