排序 Order
Database 最佳化: 排序 Order
可重新排序的资料表设计
方式 | 说明 |
---|---|
使用 integer 栏位排序 | 将新增的资料排序间隔加大,当有需要插入排序时,可以将重新排序项目数字更新到未用的数字中间,只是若重新排序空间不够时,必须要重新更新排序数字 |
使用 double 栏位排序 | 当要重新排序时,将要排序的资料顺序指定到指定的精度后方,多加几个小数位数,即可调整排序,但要小心若排序的栏位超过此精度,可能会有排序错误状况发生,可以定期重新对资料重新编号排序 |
使用 string 栏位排序 | 当要重新排序时,将要排序的资料顺序指定到指定的精度后方,多加几个字串,即可调整排序,但要小心字串长度过长问题 |
限制排序栏位一次只能移动 1 个位置 | 将两个项目排序数字交换即可,但使用体验可能会不太好 |
资料重新排序策略
- 评估排序的项目数量有多少,避免超过可排序精度
- 每晚重新整理排序数字,让精度重置,可以再继续让使用者重新排序
- 让重新排序行为在离峰时间执行,提高高峰时间使用者存取效率
double 排序
项目 | 排序 double 栏位 |
---|---|
item1 | 1.0 |
item2 | 1.01 |
item3 | 1.012 |
item4 | 1.0123 |
item5 | 1.01234 |
item6 | 1.012345 |
integer 排序
项目 | 排序 integer 栏位 |
---|---|
item1 | 100 |
item2 | 200 |
item3 | 300 |
item4 | 400 |
item5 | 500 |
item6 | 600 |
string 排序
项目 | 排序 string 栏位 |
---|---|
item1 | a |
item2 | ab |
item3 | abc |
item4 | abcd |
item5 | abcde |
item6 | abcdef |
参考资料
- Storing a re-orderable list in a database - Software Engineering Stack Exchange
- How do you best represent ordered lists in a relational database, allowing for easy and efficient updates (insertion/deletion of list elements)? - Quora
- User-defined Order in SQL
- Storing an ordered list in database
- How to design a database for storing a sorted list? - Database Administrators Stack Exchange
- database design - How to move an element in a sorted list and keep the CouchDb write “atomic” - Stack Overflow
- How to save a sorted list in a database? (SQL or NoSQL) | George Tachev’s Blog