顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 ctec (bruce)
標題 Re: [MySQL] 使用 ORDER BY 時的 index 設定
時間 2013年01月08日 Tue. PM 05:23:25


※ 引述《Knuckles》之銘言:
: SQL有使用到 ORDER BY 來排序資料時,要設定好 index 速度才會快
: 若使用 explain SELECT ... 後
: 出現 using filesort,代表 index 沒有設好
: 參考 http://www.ccvita.com/169.html
: 若沒有使用 WHERE,而是對整張表排序時,就算有設 index 也可能會用 filesort
: 因為這種情況時 using filesort 可能比 using index 快
: 參考 http://stackoverflow.com/questions/9641463/mysql-not-using-index-for-order-by

今天研究了下這篇發現不知道該怎麼改善我的資料庫

A table有欄位:id, channel等等
B table有欄位:id, Aid(內容等於A表的id),time等等
撈資料的時候先去A table看該channel有哪幾個id
再去B table將那些Aid的內容撈出來 order by time DESC

A table index=channel
B table index=Aid

我在B table裡面無論如何增加index都會出現filesort
是否應該在B table建立Cid欄位並將A table的channel copy過來,然後建立index(time,Cid)?

--
※ 作者: ctec 時間: 2013-01-08 17:23:25
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 421 
1樓 時間: 2013-01-08 19:27:40 (台灣)
  01-08 19:27 TW
B table 再加一個 index(Aid, time) 試看看吧
2樓 時間: 2013-01-09 10:13:52 (台灣)
  01-09 10:13 TW
試過了,如果Aid只有一個值,就只用where,若有兩個以上的值,就會用到filesort
3樓 時間: 2013-01-09 10:56:38 (台灣)
  01-09 10:56 TW
恩 如果執行的速度夠快的話 其實也不用太在意有沒有filesort吧
4樓 時間: 2013-01-09 11:05:14 (台灣)
  01-09 11:05 TW
如果只有一個Aid大約花萬分之幾秒,如果超過五個Aid接近百分之一秒
5樓 時間: 2013-01-09 11:07:02 (台灣)
  01-09 11:07 TW
那兩個連結的前提都是針對單一Aid的情況才有效,我實驗之後的感想
6樓 時間: 2013-01-09 11:27:00 (台灣)
  01-09 11:27 TW
喔 對喔 應該是要對同一個Aid下的東西排序 index 才會有用
如果有好幾個Aid的話 那好像應該是要再弄一個Cid然後index(Cid,time)
7樓 時間: 2013-01-10 16:11:14 (台灣)
  01-10 16:11 TW
請問要怎麼將A table的Channel欄位值自動mapping到B table Cid欄位?
8樓 時間: 2013-01-10 16:36:33 (台灣)
  01-10 16:36 TW
補充一點:mysql many to many似乎就是我的狀況,但看沒很懂,研究中
9樓 時間: 2013-01-21 22:50:15 (台灣)
  01-21 22:50 TW
今天有空又研究了下,從0.004x進步到0.003x秒....似乎是資料庫不夠大?
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇