| Pohitritev querija | ||
|---|---|---|
|
blackmamba
28. apr 2010 14:59:11
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
#1
Kako pohitriti poizvedbo? Index je nastavljen na fieldih: news_id, priotity, inserted V povezovalni tabeli je vse indeksirano. Novic je v bazi cca 30000 Zadevo upočasni ORDER BY, brez sortiranja dobim rezultat v 0.00x sekundah. HELP :) |
|
|
fatg
28. apr 2010 15:25:23
Pridružen od: 28. jan 2008 94 objav 73 2 0 |
#2
zakaj imaš LEFT JOIN? navaden join ne bi bil v redu? A je pogoj n.inserted < NOW() smiseln? Če nimaš insertov v prihodnosti, to odstrani. MySQL uporabi samo 1 index na posamezno aktivno tabelo v queryju. EXPLAIN pokaže, da izbere PRIMARY index za tabelo news. Na tej tabeli ti izvajaš sledeče operacije: WHERE (polje inserted), ORDER (priority in inserted). Mogoče je torej boljši index inserted, kar lahko sforsiraš (išči FORCE INDEX), lahko pa probaš tudi forsirati index na priority (čeprav dvomim, da bo bolje). Za tabelo news2category izbere index categoryid, vendar to pomeni, da mora delati scan tabele za pogoj n2c.newsid = n.newsid, namesto da bi poiskal z indexom. Probaj spremeniti zadevo v navaden join in forsirati index newsid za tabelo n2c. Tole je takole na hitro na pamet. Drugače pa 1.5 sekunde ni čas za sekiranje. :) |
|
|
blackmamba
28. apr 2010 15:25:55
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
||
|
blackmamba
28. apr 2010 15:41:20
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
#4
Še nisem videl tvojega posta, ko sem odkril FORCE INDEX in USE INDEX. LEFT sem odstranil, ne opazim razlike. Hvala za odgovor! |
|
|
blackmamba
28. apr 2010 16:06:06
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
#5
zmagovalni query: 0.06s fatg, kapo dol :) |
|
|
fatg
28. apr 2010 17:56:54
Pridružen od: 28. jan 2008 94 objav 73 2 0 |
||
|
blackmamba
28. apr 2010 20:22:20
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
#7
Kadar imam LIMIT 0, 20 Se da še tu kaj pridobit? |
|
|
fatg
29. apr 2010 07:45:40
Pridružen od: 28. jan 2008 94 objav 73 2 0 |
#8
mogoče boš še kaj profitiral s force index (inserted), na pamet pa težko kaj več svetujem. Čas se očitno izgublja pri sortiranju, zato morda namesto single indexa na priority ustvari kompoziten index na (priority, inserted) ali (inserted, priority) in potem forsiraj tega. Lahko probaš tudi s kompozitnim indexom (newsid, categoryid) ali (categoryid, newsid) na news2category tabeli. |
|
|
blackmamba
2. maj 2010 16:27:52
Pridružen od: 4. mar 2008 559 objav 392 25 11 |
#9
S kopozitnimi indexi mi žal ni uspelo, sem pa uredil cachiranje querijev tako da zdaj gre kot mora. |
|
|
armandoxxx
11. maj 2010 07:12:07
Pridružen od: 4. maj 2010 9 objav 14 2 0 |
#10
ena varianta je tudi z uporabo STRAIGHT_JOIN SELECT STRAIGHTJOIN n.title, n.newsid, n.short, n.picture, n.youtube, n.audio, n.galleryid, n.inserted dej please sporoči kolk hitr bo query k me zanima ! Če sploh bo kej pohitril ;) LP |
|
