深入浅出空间索引:2

简介:

深入浅出空间索引2

  第一篇讲到了传统的索引如B树不能很好的支持空间数据,比如点(POI等)、线(道路、河流等)、面(行政边界、住宅区等)。本篇将对空间索引进行简单分类,然后介绍网格索引。(深入浅出空间索引1http://www.cnblogs.com/LBSer/p/3392491.html

一、空间索引有哪几种?

  传统索引使用哈希和树这两类最基本的数据结构。空间索引虽然更为复杂,但仍然发展于这两种数据结构。因此可以将空间索引划分为两大类:1)基于哈希思想,如网格索引等;2)基于树思想,有四叉树、R树等。

 

二、网格索引

  哈希是通过一个哈希函数将关键字映射到内存或外存的数据结构,如何扩展到空间数据呢?

2.1. 网格索引原理

  扩展方法:对地理空间进行网格划分,划分成大小相同的网格,每个网格对应着一块存储空间,索引项登记上落入该网格的空间对象。

  举个例子,我们将地理空间进行网格划分,并进行编号。该空间范围内有三个空间对象,分别是id=5的街道,23的河流和11的商圈。这时候我们可以按照哈希的数据结构存储,每个网格对应着一个存储桶,而桶里放着空间对象,比如对2号网格,里面存储着id=5的空间对象,对35号网格,桶里放着id=5和id=23的空间对象。

 

  假如我们要查询某一空间范围内有哪些空间对象,比如下面的红框就表示空间范围,我们可以很快根据红框的空间范围算出它与35号和36号网格相交,然后分别到35号和36号网格中查找空间对象,最终找出id=5和id=23的空间对象。

 

2.2. 网格索引缺点

1)索引数据冗余

  网格与对象之间多对多关系在空间对象数量多、大小不均时造成索引数据冗余。比如11号商圈这个空间对象在68,69,100,101这4个网格都有存储,浪费了大量空间。

2)网格的大小难以确定

  网格的划分大小难以确定。网格划分得越密,需要的存储空间越多,网格划分的越粗,查找效率可能会降低。对于图a,这个查询需要查询4个网格,由于4个网格覆盖了整个空间,因此这个查找其实是将空间范围内所有的点数据都遍历一遍,失去了索引的意义。

 

3)很多网格没有数据

  空间数据具有明显的聚集性,比如POI只在几个热点商贸区聚集,在郊区等地方很稀疏,这将导致很多网格内没有任何空间数据。

 

 

 

下一节将介绍四叉树。

目录
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
Mysql优化之索引相关介绍(笔记)
这段内容涵盖了创建MySQL用户表的SQL语句,创建一个包含`username`、`age`和`dept`字段的联合索引,以及关于联合索引查询时遵循的最左前缀原则的解释。
44 0
|
存储 关系型数据库 MySQL
MySQL索引——从入门到出土
MySQL索引——从入门到出土
|
关系型数据库 MySQL 数据库
MySQL索引详解及如何使用
MySQL索引详解及如何使用
645 0
|
存储 缓存 自然语言处理
Lucene存储结构(高级) | 学习笔记
快速学习Lucene存储结构(高级)。
Lucene存储结构(高级) | 学习笔记
|
存储 机器学习/深度学习 缓存
FaissPQ索引简介
FaissPQ索引简介
264 0
FaissPQ索引简介
|
存储 SQL 算法
Mysql索引入门
1.什么是索引? 索引是帮助Mysql高效获取数据的一种数据结构 (排好序的快速查找的数据结构) 本质上,索引是一种 数据结构 索引的目的在于提高查找效率,类比字典 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
102 0
|
存储 SQL 自然语言处理
全文索引概述|学习笔记
快速学习全文索引概述。
115 0
|
存储 SQL 自然语言处理
全文索引概述 | 学习笔记
快速学习全文索引概述
|
存储 SQL 缓存
深入浅出索引
索引,一种强大的存在;不管是什么行业,数据都是根基,终将落盘固化,提供各方检索查询,之前整理了一篇《深入浅出spring事务》,你可以推脱不使用事务,但索引是不可或缺的必备知识点 知识点比较多,有些会分篇细化,整体会从以下几方面整理 1. 索引是什么,人人都在讲,但他的定义到底是什么? 2. 索引作用,创建表时,都要考虑索引,能带什么好处? 3. 索引负作用,索引那么好,为什么不在每个字段上都加上索引? 4. 索引实现原理,那么多数据结构,索引为什么非要使用B+Tree? 5. 索引应用,加了索引也不一定能发挥作用,使用时注意哪些?
413 0
深入浅出索引
|
SQL 关系型数据库 MySQL
深入浅出Mysql索引
深入浅出Mysql索引
深入浅出Mysql索引