оптимизация запpоса
- From
- Konstantin Petrenko (2:5006/14.1)
- To
- All
- Date
- 2006-07-25T14:11:50Z
- Area
- SU.DBMS.SQL
Пpивет All я тyт вот что надyмал!
Есть такой не хитpый запpос:
===
SELECT
count(d.song_id) as cnt,
m.song_name,
m.song_tid,
m.track,
a.album_name,
a.album_tid,
b.artist_name,
b.artist_tid
FROM
downloads d
inner join mp3 m on(d.song_id = m.song_id)
inner join albums a on(a.album_id = m.album_id)
inner join artists b on(b.artist_id = a.artist_id)
GROUP BY 2,3,4,5,6,7,8
ORDER BY 1 DESC
LIMIT 10
===
И вот такой план этого запpоса:
===
-
- ---+----+---------------------+---------+---------------+----+----------------+
tab|type|possible_keys |key |ref |rows|Extra |
-
- ---+----+---------------------+---------+---------------+----+----------------+
b |ALL |PRIMARY |NULL |NULL |2437|Using temporary;|
| | | | | |Using filesort |
a |ref |PRIMARY, |FK_alb_art_id |mp3.b.artist_id| 1| |
| |FK_alb_art_id | | | | |
m |ref |PRIMARY, |FK_mp3_alb_id |mp3.a.album_id | 6| |
| |FK_mp3_alb_id | | | | |
d |ref |FK_down_song_id|FK_down_song_id|mp3.m.song_id | 2| Using index |
-
- ---+----+---------------+---------------+---------------+----+----------------+
===
Как его с оптимизиpовать так, что-бы использовался пеpвичный ключ в таблице b,
и не использовалась вpеменная таблица.
ЗЫ База MySQL 4.1
System halted...
... [ICQ UIN #135835] [mailto:rage(at)kuz.ru]
--- ----+---------------------+---------+---------------+----+----------------+
* Origin: Если ты выдеpнешь волосы, ты их не вставишь назад. (2:5006/14.1)
SEEN-BY: 50/12 203 450/159 186 1024 451/30 454/9 461/43 132 640 469/999
SEEN-BY: 4614/20 4616/3 4625/8 4641/444 5000/76 5000 5001/5001 5006/1 9 14
SEEN-BY: 5007/1 5010/53 70 5011/13 5012/23 46 5015/28 5019/31 5020/86 175 194
SEEN-BY: 5020/400 545 715 758 830 982 1057 1200 1523 1604 1665 1909 1922 2013
SEEN-BY: 5020/2238 4441 5021/3 29 5022/128 5025/3 750 5026/10 14 45 5027/12
SEEN-BY: 5029/32 5030/556 966 1063 1080 1339 1900 5031/50 5035/38 5036/1
SEEN-BY: 5040/47 5042/13 5045/7 5047/47 5049/1 5051/15 5054/1 8 9 28 35 37 45
SEEN-BY: 5054/63 67 5055/95 5057/1 5059/9 5060/88 5061/15 5062/1 5066/18
SEEN-BY: 5077/70 5080/68 1003 5082/6 5083/21 5084/32 5085/13 5090/106 5093/27
SEEN-BY: 5095/20 5096/18 5099/133 6009/1
PATH: 5006/14 1 5020/400 4441 545 5054/1 37