Re: [請益] Order by 和使用 Index 在效能上的關係

看板Database作者 (Alien)時間16年前 (2009/09/04 16:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《Per4 (Russell)》之銘言: : 我使用的 DB 是 PostgreSQL,不過我想我的這個問題應該是相通的。 : 我的問題我想應該非常基本,但在網路上找的說法我都不太確定 ORDER BY「實際上」是 : 怎麼做的,所以請問大家。 : 問題起源很常見,基本上就是在論壇中列出論譠文章, : 都是指定 forum_id 的情況下,Sort timestamp。 : 所以基本語法都是: : SELECT * FROM messages WHERE forum_id = x ORDER BY timestamp DESC; : 但是因為 Sort (ORDER BY) 基本原因都是要整張 table 掃過一遍才會知道順序 O(N), : 所以原則上會對 timestmap 作 INDEX(或類似作法),就會有 O(logN) 的 sort 效能。 : ( Reference:http://www.postgresql.org/docs/8.3/static/indexes-ordering.html ) : 而我想問的是,要達到 WHERE forum_id = x 同時 ORDER BY timestmap 的 logN效能, : 是要 Index on (forum_id, timestmap),還是 Index on (timestamp) 就可以了? : 或者都不是,是其他寫法? : 還請各位解惑。謝謝。 肯定是 index on timestamp 才有效. 要是你說的是 index on timestamp, blablabla_id 還可能會有效. 還要留心 index 的類型是什麼. 不少 DBMS 有分 hash index 和 b-tree index 前者在 order 的時候沒有幫助, 因為 order 需要的是比較大小, b-tree 類的 index 才能 幫忙做排序. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82 ※ 編輯: adrianshum 來自: 202.155.236.82 (09/04 16:39)
文章代碼(AID): #1AeD8OGr (Database)
文章代碼(AID): #1AeD8OGr (Database)