zjcscut的gravatar头像
zjcscut 2015-10-09 17:36:46

想问下大牛们数据库怎么查询多级省市区地址效率会高点?

现在有一张表记录了很多条省市区记录,也就是省市区都放在同一张表,用树状关联。字段如下id,areaname,level(所在层级),pid(父id),status。我用了种比较笨的方法,对每一层每一个id都遍历其每一个子级,然后用hashmap嵌套hashmap的方法搜索,这样的话查询只要给出最顶层的id,这样就能获取所有子树。问题是这样感觉地区一旦多了性能会很差。还是学生党,求指教

所有回答列表(8)
雨、小雨的gravatar头像
雨、小雨  LV8 2015年10月10日

递归查询就可以吧 ....

oracle 的写法像这样 :select * from table start with areaname='陕西省' connect by prior id=pid

mysql 的话可以写function实现,语句的话网上很好找,就不多加赘述了

toby2015的gravatar头像
toby2015  LV2 2015年10月10日

我觉得你没把问题描述清楚,这样存储省市区是没有问题的,你想要的结果是什么? 处于什么目的进行查询?如果是前端级联选择,我们一般不这样做,为了提高效率都会放到缓存中。作为树形展示,也会做动态加载,一次全加载的页面没必要。至于sql查询,直接查询就好,按照level、pid、id进行排序,出来结果就是ok的。

tinbe的gravatar头像
tinbe  LV11 2015年10月12日

树查询语句就可以实现同1楼如此connect by

程序猿全敏的gravatar头像
程序猿全敏  LV29 2015年10月12日

我以前也搞过这个。。哈哈

test123123的gravatar头像
test123123  LV6 2015年10月12日

不建议楼上的几种方式 如果一旦量大就等着页面加载死吧 以下方法为经典办法该法不是我发明的是公司某个大神想出来的效率杠杠的 

数据库设计只需要保存父及节点ID即可如

 ID      名称         父ID

  1       安徽省       0

  2       合肥市       1

  3       六安市       1

诸如此类父ID设个索引 速度毫无压力希望采纳啊

   

咕噜流氓兔的gravatar头像
咕噜流氓兔  LV5 2015年10月13日

感觉还是楼上这个6

是非黑白的gravatar头像
是非黑白  LV8 2015年10月15日

事先把省市分级准备好放到一个 json 文件中吧。

每次都取数据库查效率太低了。

最代码温柔的gravatar头像
最代码温柔  LV18 2015年11月4日

从数据库优化来,加入索引,这样查询的比较快。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友