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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题