加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

海量、多维数据让人抓狂?高效搜索方法看这里

发布时间:2019-09-16 22:47:06 所属栏目:MySql教程 来源:读芯术
导读:副标题#e# 人与世界万物的互动会产生大量的时空数据。那么,当我们需要随时调用过去的数据时,改怎么办?尤其是面对各种海量、多维度的数据库,如果没有高效的搜索方法,我们只能望洋兴叹、束手无策。 别担心,本文将用详细的代码,手把手来传授高效搜索法的

例如:

  1. select * from test where  
  2.  c1 ...  
  3.  and crt_time between ? and ?  
  4.  and test->> c1 in (?, ? ...); 

根据统计数据自动使用适当的索引。如果需要,bitmapAnd和bitmapOr将在多个索引上自动执行合并扫描。跳过不需要扫描的页面,重新检查命中的页面。

堆表存储分级和分区

存储可以分为一级分区或多级分区:

1. 单一分区

例如,按时间划分。

  1. create table test(  
  2.  id int8,  
  3.  crt_time timestamp, -- Time  
  4.  pos geometry, -- Location  
  5.  obj jsonb -- Object description  
  6. )  
  7. PARTITION BY range (crt_time)  
  8. ;  
  9. create table test_201701 PARTITION OF test for values FROM ( 2017-01-01 ) TO ( 2017-02-01 );  
  10. ...... 

2. 多层分区

例如,先按时间分区,然后按Geohash划分。

  1. create table test_201701 PARTITION OF test for values  
  2. FROM ( 2017-01-01 ) TO ( 2017-02-01 ) partition by range(st_geohash(pos,15));  
  3. ...  
  4. create table test_201701_prefix1 PARTITION OF test for values  
  5. FROM ( xxxx1 ) TO ( xxxx2 );  
  6. -- Generate BOX (GRID) on a map, find corresponding boundaries and use  
  7. -- boundaries as partitioning conditions 

使用分区时,如果查询条件包括分区键(如时间和空间范围),相应的分区将自动定位,这即为需要扫描的数据量。

创建面向对象属性的GIN索引,以实现高效查询。

索引分级与分区

与数据一样,索引在不使用分区表的情况下也支持分区逻辑。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读