| MySQL - Dolgi query ali več manjših? | ||
|---|---|---|
|
G-force
4. jan 2010 17:04:52
Pridružen od: 31. mar 2008 828 objav 516 60 3 |
#1
Zanima me ali se je boljše potruditi in narediti en "dolgi" query v katerem uporabiš JOIN-e ali je vseeno in pač narediš več manjših, ko kakšen podatek potrebuješ? Predvsem me zanima z vidika hitrosti (za končnega uporabnika) in obremenitve (za strežnik)? |
|
|
phpseo
4. jan 2010 18:34:27
Pridružen od: 24. nov 2007 146 objav 78 19 1 |
||
|
schtr4jh
4. jan 2010 18:46:39
Pridružen od: 24. nov 2008 402 objav 322 33 4 |
#3
V primeru, da uporabljaš join, si poglej tale primer: Povezuješ 3 tabele (recimo x, y in z). V x tabeli imaš 1000 zapisov, v y tabeli imaš 5000 zapisov, v z tabeli imaš 500 zapisov. Join najprej dejansko primerja vsakega z vsakim in dobiš 2.500.000.000 vrstic (10005000500). To so zaenkrat še nekakovostni podatki. Šele nato pa se izvede "on" del stavka ( ... join on x.idx = y.idx) ter recimo dobiš 2.500 vrstic s pravimi podatki. (kar pomeni, da mora baza pogledat pri vsaki vrstici ali se "on" del stavka ujema: Razmerje podatkov v tem primeru je 1:1.000.000=kakovostni:nekakovostni). Če narediš več manjših: Na kratko: za delo z večjo količino podatkov je join počasnejši in bolj obremeni mašino. Se motim? |
|
|
Roky
4. jan 2010 18:47:38
Pridružen od: 9. apr 2008 2506 objav 3240 335 107 |
#4
Ja odvisno kako dolg je ta query, če je res 150 joinov potem je res bolje, da delaš posamezne selecte, če pa imaš le par joinov pol pa je povezovanje, kopiranje podatkov (iz mysql v mysql driver (pred php 5.3)) za vsak select posebej pomoje počasnejše. Zadeva torej zavisi od količine podatkov. rok.meglic@gmail.com - 031 492 148
|
|
|
Vini
4. jan 2010 20:05:37
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
#5
schtr4jh, kakšne neumnosti pa govoriš, madona? Še nikoli nisi slišal za indekse? :) G-force, načeloma bi moral biti en query hitrejši že zaradi tega, ker imata query parser in query optimizer delo le enkrat. Kaj točno je pa v tvojem primeru hitrejše, pa rajši stestiraj :) Če pa res potrebuješ veliko količino manjših (enakih) queryjev, si pa oglej prepared statements. |
|
|
suprpp
4. jan 2010 20:28:35
Pridružen od: 21. jun 2008 362 objav 841 126 37 |
#6
Sicer z SQL že dolgo nisem delal, sem pa slišal ravno zadnjič eno anekdoto, ki ti bo mogoče odgovorila. V eni večji spletni banki so imeli grozen problem s počasnim queryem, ki se je izvajal 20+ sekund; nesprejemljivo. In to na grozno hitrih mašinah - gre se za okolje kjer denarnih omejitev ni. ps. šlo se je pa za MS SQL. SSD spletno gostovanje in Registracija domene NEOSERV
cPanel, PHP 4-7, SSH, GIT, SVN | 800+ domenskih končnic | Brezplačna selitev strani k NEOSERV |
|
|
Gogy
4. jan 2010 20:41:05
Pridružen od: 17. mar 2007 2491 objav 2064 252 12 |
#7
Samo da ne bomo na koncu izvedeli, da gre za bazo s 12 tabelami od katerih bi bil join na 2 tabeli in da nobena nima več kot 500 vrstic v tabeli :) in da je 50 obiskov na dan :) G-force, da se fantje ne bi matrali... lahko poveš kak podatek več? |
|
|
schtr4jh
4. jan 2010 21:06:09
Pridružen od: 24. nov 2008 402 objav 322 33 4 |
#8
Najverjetneje sem nekaj pojmov pobrklal ampak vseeno se mi dozdeva, da nam je profesor povedal, kaj se zgodi, ko uporabljamo join stavke. Možno, da je zraven rekel, da se to zgodi, če ne uporabljamo indexov. =) (zato sem pa zraven dodal "Se motim?") =) |
|
|
Vini
4. jan 2010 21:33:27
Pridružen od: 1. sep 2006 6612 objav 5234 611 56 |
||
|
carli
5. jan 2010 09:12:26
Pridružen od: 5. avg 2008 1258 objav 583 54 17 |
#10
Dolg SQL stavek? Meja je kaj 22" monitor, preden se vrstica zlomi? Tak o vprašanju če ti ne gre join, ali je smiselno delat join ali pa enostavno en SQL stavek, kjer izbiraš iz a in b tabele, na podlagi a.id in b.nek_id = a.id iz tabele a in tabele b. Spada ta stavek pod dolge ker ni joina? :D Primer za zadnji post v phpBB3 v nekem forumu oz. sklopu: Pa stvar dela normalno, pa ni moje stvarjenje, bi se sam verjetno kakega joina lotu, bi bil pa verjetno daljši :D |
|