MySQL-谁有比较好的好友排序方法?

MySQL-谁有比较好的好友排序方法?

清晨说ぺ晚安 发布于 2017-09-02 字数 395 浏览 1209 回复 3

游戏中对已加的好友进行排序,可以把某好友向上或向下排。现在的做法是:数据表有一个小数类型好友的排序字段,存的自己所有好友的排序数字。当把某好友向上移时,需要查出来此好友上面两位的排序数字,然后把这两个排序数字相加除2,即得到这两个数字中间的数,来实现该好友插入到好友前面,更新字段只更新当前需要上移好友的排序字段即可。谁还有更好一些的排序方法?数据表用float字段做order by对性能是否有影响?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-10-29 3 楼

1、如果是一步步移的话,用替换法比较方便,二个好友记录交换排序值
2、如果是可以跳跃移动的话,采用插入排序法,需要更新二个好友排序值之间数据记录,反正在一个系统里好友不会很多,Facebook用户好友的平均数量为120人

瑾兮 2017-10-23 2 楼

若要求速度,可以把“排序字段”缓存到内存(select 排序字段 from friend order by 排序字段 asc),且用链表结构组织。当加入好友或更新“排序字段”时,使用插入排序的方法。即把这个好友拿出来依次从第一个好友依次向后比较“排序字段”,然后在对应位置插入。
因为好友记录已经是有序的,只是个别记录涉及更新,所以使用插入排序的方法最快。
“排序字段”缓存到内存,免去了每次都从DB表中依次去select,这样频繁与磁盘IO交互。而且每次取出来要order by排序,比较慢。
定期更新按“排序字段”排好序的记录到DB。若DB记录组织形式也使用链表,可以按对应行插入就好了,可惜DB没有这个功能。
基于比较的排序是每对数做减法,"浮点数"做减法涉及对阶,规格化问题,所以速度上肯定比整型数慢。

灵芸 2017-09-12 1 楼

对排序字段加个索引,应该可以提高order by 的性能。