zenghuijava 2013-12-10 07:22 采纳率: 0%
浏览 3850

类似微信查找附近人分页排序问题

目前我想到的查找附近人方案有两种:
1,直接通过sql语句求的距离,然后按距离排序,保存在list中,序列化json格式返回给客户端
SELECT LEFT((2 * ASIN(SQRT(POW(SIN((RADIANS(40.044058)-RADIANS(a.latitude))/2),2) + COS(RADIANS(40.044058))*COS(RADIANS(a.latitude))*POW(SIN((RADIANS(116.302549) - RADIANS(a.Longitude))/2),2)))* 6378.137),4) AS distance,a.userid,wd.username,wd.nickname,a.latitude,a.Longitude,a.areacode,ws.stepdaywanbua,ws.minwalkdate,a.sex FROM
(SELECT userid,Longitude,latitude,areacode,sex FROM wanbu_member_profile b WHERE b.areacode LIKE 'uzu%')a
LEFT JOIN wanbu_data_user wd ON a.userid=wd.userid LEFT JOIN wanbu_stat_user ws ON

a.userid=ws.userid WHERE a.userid NOT IN (SELECT friendid FROM wanbu_home_friend WHERE userid='6154' ) AND a.userid<>'6154' HAVING distance <= 10
order by distance ASC
2,通过sql语句查询出经度纬度,然后将经度纬度传到算距离函数中,求的距离,一起保存在list中,然后通过list中某个属性值排序,得到最终结果,序列化json格式,返回给客户端。
SELECT a.userid,wd.username,wd.nickname,a.latitude,a.Longitude,a.areacode,ws.stepdaywanbua,ws.minwalkdate,a.sex FROM(SELECT userid,Longitude,latitude,areacode,sex
FROM wanbu_member_profile b WHERE b.areacode LIKE 'uzu%' order by b.areacode desc )a LEFT JOIN wanbu_data_user wd ON a.userid=wd.userid LEFT JOIN wanbu_stat_user ws ON a.userid=ws.userid WHERE a.userid NOT IN (SELECT friendid FROM wanbu_home_friend WHERE userid='104095' ) AND a.userid<>'104095' limit 0,20 ;

方案1存在性能消耗问题严重,12个线程,请求。对数据库压力是1200%多。耗时10000多ms
方案2性能有提升,对数据库压力降低为900%。耗时1000多ms.

但是目前遇到问题是:如果提升性能,使用方案二。客户端分页的话,就没有办法正确的排序。

  • 写回答

1条回答 默认 最新

  • Ryan-Miao 2015-11-27 07:08
    关注

    所以排序方案要怎么设计呢

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器