省市县乡村五级数据联动的效率问题
在项目中遇到省市县乡村五级数据联动选择的需求,开始时在网上找了N多的mysql数据文件,大多都不够新。因为每年的地区尤其是精确到村级(社区)的变化实在是太大,所以就想去 国家规划局 用爬虫爬取一份,不过因为中间被公司大佬打断,至今也没写个爬虫。
公司大佬有一套2018年精确到村级的SQL,能应对项目需求也就懒得再去爬取。(听说爬取国家规划局的数据要小心,可能会涉及到国家机密问题,不知真假)
真正使用数据时,发现数据库数据超过60万条,查库的效率问题非常值得注意。
开始我想到的优化方案无非就是将乡级和村级数据分表存储,但是在使用的时候又涉及到连表操作,感觉有点小题大作。
百万数据而且是固定数据,应该是有更好的解决方法。敢于面对自己的经验不足,向大佬低头。大佬送我一个词:水平分表。
原来如此,通过结合行政区划代码的特性,栗子:110101001009 中前两位代表省级,前四位代表市级,前六位代表区级,加上后面三位代表乡镇(街道),再加上最后三位代表村级(社区)。
按照省级代码将表水平分割成每个省一个数据表,表名统一使用 【area_省级代码】类似有规律的名称,方便数据查询。
如此一分,数据查询速度翻倍提升,尤其是在联动查询时一点不影响操作。(第一步确定省份,也就确定了查询的表)。