你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

数据库字段这样排序怎样

2021/11/27 4:24:04

本文仅记录一下本人的思想,有有趣的想法可以和我分享一下吧!
工作多了之后对于排序用得肯定也不少,最开始用数字排序,很好,只有廖廖几条数据而且不经常调整的时候很好用。
然后客户加了数据,从3条到了30条,经常需要把某一条数据的排序上调一位;有意思,啪啪一顿敲代码,上移一位我就减一(明显这个方案会被自己否决),那就复杂一点简单表达:上移一位就把当前排序序号和上一个数据排序序号互换!下移也如此,嗯嗯,不考虑并发,都在数据库操作也不算复杂,也保证了效果一定达到!
然后客户又提了需求,一步一步太慢了,我要把最好一个置顶的话,我得点多少次啊!然后前端加入了拖动动作,好了,后端获取到被拖动的对象,拖动后的位置,然后像打麻将一样插入,在对象调动前到对象调动后之间的全部对象都来一次序号互换?no,太复杂了而且不能保证百分百不出差错!然后发现30条数据循环重新排序也不用很久,然后我只获取调动完之后的对象,从0到30从新改序号!debug:耗时不到一秒!完美!需求费到手,收工!
客户生意大了,干到了百万用户,我还用这种排序的话,客户都要发飙了,我让某某“插个队”怎么等了半分钟?要是web端的话虽然慢点,但是总会排好给你,如果是桌面端,超时无响应被客户叉掉了进程,排序可能还乱了一点呢!这时就发现还用数字(指int)排序是不行了,于是想了想,发现使用小数数字也好像不是不行,理论上如果对小数位数没有限制的话在任意两个小数之间是可以有无穷多个小数(按需求,我们只取一个小数足矣),比如
0.000001到
0.0000011之间可以有
0.00000101(至少一个)符合条件的小数,好像也能解决问题了吧!但是再小的容错率也耐不住次数多,而且在电脑领域中小数也是有限的!然后又萌生了多字段组合排序想法,我多加一个时间类型倒序/顺序,取决于置顶操作多还是置低操作多!拖动边排序我不再计算,而是直接把排序小数等于排序后的位置的前一位排序或后一位排序,然后更新排序字段中的时间排序!这种方法理论上是可以达到调整排序的最优解了吧!

如果说,还要提高排序查询效率,排序字段只用一个,而且排序字段使用了索引优化查询时间!那能怎么办呢?

想了想,用小数的好处在于任意两个小数之间都有无穷多个(至少一个)小数,但是由于设备的限制,还是觉得不够完美,总想找出一劳永逸的办法,然后就想起自己以前是试过错把排序字段使用varchar类型导致排序结果两位数以上就不准确了!然后找一下排序规则发现是0到9到字母a到z的排序(字母大小写排序没有留意)貌似在任意两个字符串直接都有无穷多个(至少一个)字符串!那这种方式是否可取?有大神看到的话希望能为我解答解答。