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 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64