Advertisement
bokunda

II_kol_2017_18_eaukcija

Dec 14th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.40 KB | None | 0 0
  1. -- Kolokvijum 2017-18
  2.  
  3. use e_aukcija_indeksi
  4. go
  5.  
  6.  
  7. -- Bez indeksa: 1.54
  8. -- Sa ncl_aukcije: 0.28
  9. -- Sa ncl_vremeZatvaranja: 0.039
  10.  
  11. CREATE NONCLUSTERED INDEX ncl_aukcije
  12. ON ponude(idAukcije)
  13.  
  14. CREATE NONCLUSTERED INDEX ncl_vremeZatvaranja
  15. ON aukcije(VremeZatvaranja)
  16.  
  17. create procedure sp_aktuelno
  18. as
  19. begin
  20.     select naziv,
  21.     case when aktuelnaPonuda is null then pocetnaCena else aktuelnaPonuda end as aktuelnaPonuda
  22.     from
  23.     (select naziv, pocetnaCena,
  24.         (
  25.         select max(iznosPonude)
  26.         from ponude p
  27.         where p.idAukcije = a.id
  28.         ) as aktuelnaPonuda
  29.     from aukcije a
  30.     where vremeZatvaranja > GETDATE()
  31.     ) as maxPonude
  32. end
  33.  
  34. exec sp_aktuelno
  35. go
  36.  
  37. CREATE NONCLUSTERED INDEX ncl_idAukcije
  38. ON Aukcije(id)
  39.  
  40. CREATE NONCLUSTERED INDEX ncl_idKorisnika
  41. ON Korisnici(id)
  42.  
  43. -- Bez indeksa: 0.92
  44. -- Sa ncl_idAukcije: 0.68
  45. -- Sa ncl_idKorisnik: 0.07
  46.  
  47. create procedure sp_aukcija
  48. (
  49.     @idAukcije int
  50. )
  51. as
  52. begin
  53.     -- DECLARE @idAukcije int
  54.     -- SET @idAukcije = 3
  55.     select a.naziv, a.opis, kat.naziv as kategorija,
  56.     case when DATEDIFF(minute, getdate(), vremeZatvaranja)<0 then 0 else DATEDIFF(minute, getdate(), vremeZatvaranja) end as preostaloMinuta,
  57.     (select count(*) from ponude p where p.idAukcije=a.id ) as brojPonuda,
  58.     (select case when max(iznosPonude) is null then a.pocetnaCena else max(iznosPonude) end from ponude p where p.idAukcije=a.id) as aktuelnaPonuda,
  59.     kor.username
  60.     from aukcije a join kategorije kat
  61.     on a.idKategorije = kat.id
  62.     join korisnici kor on a.idProdavca=kor.id
  63.     where a.id = @idAukcije
  64. end
  65.  
  66. exec sp_aukcija 18068
  67. go
  68.  
  69.  
  70. -- Bez indeksa: 0.01
  71. -- Sa klasterovanim pk na ponude: 0.1 -- ALI MANJE MEMORIJE ZAUZIMA ZBOG RID-a
  72.     -- Sa klasterovanim pk na korisnike: 0.07 -- Jos manje memorije i brze
  73.  
  74. ALTER TABLE ponude
  75. ADD CONSTRAINT pk_idPonude
  76. PRIMARY KEY (id)
  77.  
  78. ALTER TABLE korisnici
  79. ADD CONSTRAINT pk_idKorisnika
  80. PRIMARY KEY (id)
  81.  
  82. ALTER TABLE korisnici DROP CONSTRAINT pk_idKorisnika
  83.  
  84. create procedure sp_istorija_ponuda
  85. (
  86.     @idAukcije int
  87. )
  88. as
  89. begin
  90.     select kor.username, p.vremePonude, p.iznosPonude
  91.     from ponude p join korisnici kor
  92.     on p.idKupca = kor.id
  93.     where p.idAukcije = @idAukcije
  94.     order by p.vremePonude
  95. end
  96.  
  97. exec sp_istorija_ponuda 18068
  98. go
  99.  
  100. -- INSERT
  101.  
  102. -- Posto je u pitanju INSERT komanda, pozeljno je da nad tabelom ponude imamo samo klasterovane indekse
  103.     -- posto isti ne usporavaju izvrsavanje INSERT naredbe
  104.  
  105. -- Bez indeksa: 0.01
  106. -- Sa ncl_???: 0.02
  107.  
  108. create procedure sp_nova_ponuda
  109. (
  110.     @id int, @idKupca int, @idAukcije int, @iznosPonude decimal(8,2), @vremePonude datetime
  111. )
  112. as
  113. begin
  114.     insert into ponude(id, idKupca, idAukcije, iznosPonude, vremePonude)
  115.     values(@id, @idKupca, @idAukcije, @iznosPonude, @vremePonude)
  116. end
  117.  
  118. exec sp_nova_ponuda 275329, 10000, 17049, 4850, '2017-12-26 08:00:00'
  119. go
  120.  
  121. -- Bez optimizacije: 3.07
  122. -- Sa cl_idProdavca: 2.85
  123.  
  124. -- Da bude sortiran prodavac
  125. CREATE CLUSTERED INDEX cl_idProdavca
  126. ON aukcije(idProdavca)
  127.  
  128. CREATE NONCLUSTERED INDEX ncl_brPozOcena
  129. ON korisnici(brPozOcena)
  130.  
  131. CREATE NONCLUSTERED INDEX ncl_brNegOcena
  132. ON korisnici(brNegOcena)
  133.  
  134. DROP INDEX cl_idProdavca
  135.  
  136.  create procedure sp_najbolji_korisnici
  137.  as
  138.  begin
  139.      select top 100 kor.username, kor.brPozOcena, kor.brNegOcena, count(*) as brAukcija
  140.      from korisnici kor
  141.      join aukcije a
  142.      on kor.id=a.idProdavca
  143.      group by kor.username, kor.brPozOcena, kor.brNegOcena
  144.      order by brPozOcena desc, brNegOcena asc
  145. end
  146.  
  147. exec sp_najbolji_korisnici
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement