地理位置处理—Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)
最近比较忙,本来很早就想写对比文章了,这里先大致写写,等之后有空再详细介绍吧。这个文章我本地MD笔记也有,以后再上传到github。
1. MySQL的geography
- 适合查找某个指定范围内的物体(比如一个多边形内的)
- 适合需较高精确位置关系的场景。比如传来一个用户坐标,如果需要较精确的定位,来确定用户是否在A区域还是B区域,可以用这个。
- geography往往伴随着函数计算传入的点Point位置是否在某个区域Polygon内,这个据需要数据库函数。因为走函数等于每一行都需要计算,所以是不走索引的,需要全表查找,效率就很低。设置空间索引Spatial index,可以加速这一过程(具体原理没细究,有兴趣可以自己去查一查)。
前面提到函数操作,不走索引。可以了解下virtual column,虚拟列。
过去把函数操作的值另外存一列,比如插入时间,需要另外存个时间戳版本,可以数据库写个触发器,插入时制动转化然后存到新列里面。但是这样麻烦又低效。可以新建一列,设置为虚拟列,其值是函数计算结果,这样插入数据时虚拟列的值会自动计算,而且由于虚拟列直接存在数据字典而不是持久化到磁盘,效率很高(类似于函数索引了)。</