Forum » Programiranje » SQL indeks?
SQL indeks?
ta_pravi ::
Lep pozdrav
Kreiral sem skupinski indeks. Zdaj bi ga pa rad uporabil in sicer tako, da bi to navadel v poizvedbi, pa mi javi napako.
POIZVEDBA:
SELECT *
FROM prednarocilo
USE INDEX(skupinski_index1)
Uporabljam pa Microsoft SQL server in za poizvadbe pa SQL Server Management Studio Express.
LP
Kreiral sem skupinski indeks. Zdaj bi ga pa rad uporabil in sicer tako, da bi to navadel v poizvedbi, pa mi javi napako.
POIZVEDBA:
SELECT *
FROM prednarocilo
USE INDEX(skupinski_index1)
Uporabljam pa Microsoft SQL server in za poizvadbe pa SQL Server Management Studio Express.
LP
ta_pravi
NavadniNimda ::
Zakaj bi pa uporabil indeks, če zahtevaš, da ti vrne celo tabelo?! Index je primarno namenjen hitremu iskanju.
Če v gornjem primeru hočeš, da ti zapise vrne v nekem vrstnem redu, uporabi ORDER BY klavzulo - če bo index uporaben, pa ga bo SQL server tudi uporabil (avtomatično in brez hinta).
Če v gornjem primeru hočeš, da ti zapise vrne v nekem vrstnem redu, uporabi ORDER BY klavzulo - če bo index uporaben, pa ga bo SQL server tudi uporabil (avtomatično in brez hinta).
frudi ::
Kot prvo - ne uporabljaj hintov, razen če zelo dobro veš, kaj delaš. Query optimizer dejansko (večinoma) ve, kaj dela, tako da boš z uporabo hintov običajno naredil več škode, kot koristi.
kot drugo - indexi se uporabijo avtomatsko, zato jih ne rabiš določiti preko hinta. Kvečjemu v kakih kompleksnejših querijih ali če veš, da ima uporabljen index zastarelo statistiko, ali pa kak podoben scenarij, s katerimi pa se ne rabiš obremenjevati...
kot tretje - v T-SQL se hinte uporablja s keywordom WITH, ne USE; recimo
SELECT *
FROM prednarocilo WITH(INDEX(skupinski_index1))
in za konec - indexi so uporabni za filtriranje in združevanje podatkov. V querijih brez WHERE pogoja in/ali JOIN-ov ne bo koristi od njih. No, mogoče če bi select-al le stolpce, ki so del indeksa, kar v tvojem primeru ne drži.
kot drugo - indexi se uporabijo avtomatsko, zato jih ne rabiš določiti preko hinta. Kvečjemu v kakih kompleksnejših querijih ali če veš, da ima uporabljen index zastarelo statistiko, ali pa kak podoben scenarij, s katerimi pa se ne rabiš obremenjevati...
kot tretje - v T-SQL se hinte uporablja s keywordom WITH, ne USE; recimo
SELECT *
FROM prednarocilo WITH(INDEX(skupinski_index1))
in za konec - indexi so uporabni za filtriranje in združevanje podatkov. V querijih brez WHERE pogoja in/ali JOIN-ov ne bo koristi od njih. No, mogoče če bi select-al le stolpce, ki so del indeksa, kar v tvojem primeru ne drži.
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
ta_pravi ::
indeksov ne delam kar tako brezveze, ampak imamo par nalog v seminarski nalogi za nardit z uporabo indeksov. Ja uporabil jih bom v where pogoju. Delamo pa z indeksi na tabeli ki ima 100 000 zapisov...mislim da je to dovolj dober razlog...?:)
Zgoraj sem samo dal primer poizvedbe, ki mi ne deluje, pa sem zelo hvaležen saj sem dobil odgovor na to kaj naj bi bilo narobe oziroma kako se sploh uporabi indeks v poizvedbi v Microsoft SQL....
Vsem hvala za odgovore! Ko probam pa vam javim če dela...
LP
Zgoraj sem samo dal primer poizvedbe, ki mi ne deluje, pa sem zelo hvaležen saj sem dobil odgovor na to kaj naj bi bilo narobe oziroma kako se sploh uporabi indeks v poizvedbi v Microsoft SQL....
Vsem hvala za odgovore! Ko probam pa vam javim če dela...
LP
ta_pravi
frudi ::
Sej indeksi niso brezveze, so pravzaprav nujni za vsako dobro postavljeno bazo.
Ni pa smiselno forsirati njihovo uporabo v querijih, s pomočjo hintov; razen če imaš zelo specifičen razlog za takšno početje. V 99% primerov, bo query optimizer sam pripravil boljši execution plan, kot če ga 'omejuješ' s hinti.
Ni pa smiselno forsirati njihovo uporabo v querijih, s pomočjo hintov; razen če imaš zelo specifičen razlog za takšno početje. V 99% primerov, bo query optimizer sam pripravil boljši execution plan, kot če ga 'omejuješ' s hinti.
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL inner joinOddelek: Programiranje | 3295 (2550) | smacker |
» | Myslq index ne deluje???Oddelek: Izdelava spletišč | 2200 (1978) | algo |
» | mysql "hitrost"Oddelek: Izdelava spletišč | 1975 (1857) | Veron |
» | [PHP + mysql] Kako vstaviti več vrstic naenkrat ?Oddelek: Programiranje | 1482 (1289) | Ziga Dolhar |
» | [mySQL] Kaj je hitrejše?Oddelek: Programiranje | 1394 (1195) | dmok |