Prikazi cijelu temu 05.10.2017 11:53
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Lokacija:zagreb


Predmet:Re: Kako smanjiti vrijeme query upita
evo rijesio
Trebalo je upotrebljavati "aliase" i dva SELECT-a
pa ajmo pogledati.

Zbog jednostavnosti varijable su var_1, var_2 ... var_7, a table su tabla_1...tabla_5

tabla_1: var_1     var_7
tabla_2: var_1var_2    var_6 
tabla_3:  var_2var_3    
        
tabla_4:   var_3var_4 var_6 
tabla_5:    var_4var_5  
        

Nakon sto napravimo upt na svih 5 tabela zelimo da nam se na ekranu prikazu sljedeci rezultati:
var_1, var_2, var_3, var_5

to cemo dobiti sljedecim:

PreuzmiIzvorni kôd (Text):
  1. //koje varijable u konacnici zelimo vidjeti
  2.  
  3. SELECT tbl_123.var_1, tbl_123.var_2, tbl_45.var_3, tbl_45.var_5


Koristimo aliase, ja sam stekao dojam da ubrzavaju upite. Prvi upit na tabele 1,2 i 3.

kolone koje zelimo vidjeti ili kasnije sa njima raditi odaberemo sa SELECT
PreuzmiIzvorni kôd (Text):
  1. FROM
  2.     (
  3.         SELECT t3.var_3, t1.var_7, t2.var_6

alias tabli dobijemo tabla_1=t1, tabla_2=t2 i tabla_3=t3, varijablama ne dajemo aliase
PreuzmiIzvorni kôd (Text):
  1.         FROM tabla_1 t1
  2.         INNER JOIN tabla_2 t2
  3.                 ON t2.var_1 = t1.var_1
  4.         INNER JOIN tabla_3 t3
  5.                 ON t3.var_2 = t2.var_2
  6.         WHERE t3.var_3 >= '2017-10-01'

rezultatu dajemo alias ime, tbl_123. To je tabla sa nastala od tabli t1,t2 i t3 sa prikazom var_3,var_7 i var_6

PreuzmiIzvorni kôd (Text):
  1.       // alias ime table koja je nastala iz tabli1,2 i3
  2.      ) tbl_123

(tabla_1, tabla_2, tabla_3) INNER (tabla_4, tabla_5)

PreuzmiIzvorni kôd (Text):
  1. // INNER naredba mysql-a koja vrsi presjek
  2. INNER JOIN

sada radimo alias drugu tablu koja je presjek table_4 i table_5
kolone koje zelimo vidjeti nakon INNER-a tabli 4 i 5
PreuzmiIzvorni kôd (Text):
  1.    (
  2.         SELECT t4.var_3, t4.var_6, t5.var_4, t5.var_5
  3.         FROM tabla_4 t4
  4.         INNER JOIN tabla_5 t5
  5.                 ON t5.var_4 = t4.var_4
  6.         WHERE t4.var_3 >= '2017-10-01'

presjeku table 4 i table_5 dajemo alias ime tbl_45

PreuzmiIzvorni kôd (Text):
  1. // nakon presjeka tabli4 i5 dajemo alias ime tbl_45
  2.  ) tbl_45

uvijet za (tabla_1, tabla_2, tabla_3) INNER (tabla_4, tabla_5)
PreuzmiIzvorni kôd (Text):
  1. //uvijet za presjek alias tabli
  2.  ON tbl_123.var_3 = tbl45.var_3 AND tbl_123.var_6 = tbl_45.var_6

i to je to 0,07 sec a prije min 44 sec

evo sada cijeli kod skupa:
PreuzmiIzvorni kôd (Text):
  1. SELECT tbl_123.var_1, tbl_123.var_2, tbl_45.var_3, tbl_45.var_5
  2. FROM
  3.     (
  4.         SELECT t3.var_3, t1.var_7, t2.var_6
  5.         FROM tabla_1 t1
  6.         INNER JOIN tabla_2 t2
  7.                 ON t2.var_1 = t1.var_1
  8.         INNER JOIN tabla_3 t3
  9.                 ON t3.var_2 = t2.var_2
  10.         WHERE t3.var_3 >= '2017-10-01'
  11.      ) tbl_123
  12.  
  13. INNER JOIN
  14.  
  15.      (
  16.         SELECT t4.var_3, t4.var_6, t5.var_4, t5.var_5
  17.         FROM tabla_4 t4
  18.         INNER JOIN tabla_5 t5
  19.                 ON t5.var_4 = t4.var_4
  20.         WHERE t4.var_3 >= '2017-10-01'
  21.      ) tbl_45
  22.   ON tbl_123.var_3 = tbl45.var_3 AND tbl_123.var_6 = tbl_45.var_6

zivot je moja domovina.
Ovaj post je ureden 1 puta. Posljednja izmjena 05.10.2017 12:01 od strane Avko.