MongoDB的索引需要考慮每個(gè)鍵的索引方向,為何這么設(shè)計(jì)?而MySQL的索引則無需考慮方向,兩者之間有何優(yōu)劣勢?
問題描述
給一個(gè)表/集合創(chuàng)建索引:
// 給集合創(chuàng)建索引,以下會創(chuàng)建兩個(gè)不同的索引db.col.ensureIndex({user_id:-1, status:-1})db.col.ensureIndex({user_id:1, status:1})// 給表創(chuàng)建索引alter table table_name add index idx_name(`user_id`, `status`)
問題解答
回答1:mongodb和mysql的索引實(shí)現(xiàn)方式不一樣。mongodb不太熟悉。所以只針對mysql來說:
mysql實(shí)現(xiàn)索引的方式是btree或者btree的變種,前序和后序遍歷都一致的。
同時(shí)mysql的索引也支持升序和降序排列,只是默認(rèn)是升序罷了。
回答2:當(dāng)排序過程中用到索引時(shí),索引的方向能起到一定的作用。這個(gè)左右對于小數(shù)據(jù)量的表并不明顯,而對于大數(shù)據(jù)量的表就能顯現(xiàn)出來。因?yàn)镸ySQL出現(xiàn)較早,當(dāng)時(shí)應(yīng)該沒有進(jìn)行大數(shù)據(jù)量的這種考慮。
回答3:http://tech.meituan.com/mysql-index.html
回答4:在sort()的時(shí)候有用,當(dāng)排序的順序和索引順序一樣時(shí),mongodb直接從索引中獲取排序信息以此提升性能。
請參考:http://docs.mongoing.com/manual-zh/tutorial/sort-results-with-indexes.html
