【问题标题】:Is there a way to force a specific secondary index to be used first in queries in Oracle NoSQL Database?有没有办法强制在 Oracle NoSQL 数据库的查询中首先使用特定的二级索引?
【发布时间】:2021-06-30 20:22:10
【问题描述】:

我的应用程序索引 JSON 文档中的一些字段以创建二级索引。下面是一个示例文档。假设为年龄和收入创建索引。

样本记录:

 {  "id":1,  "appUser" : {
       "firstname":"John",
       "lastname":"Doe",
       "age":27,
       "income":150000,
       "lastLogin" : "2020-10-29T18:43:59.8319",
       "address":{"street":"150 Route 2",
             "city":"Antioch",
             "state":"TN",
             "zipcode" : 37013,
             "phones":[{"type":"home", "areacode":423,
                         "number":123456}]
            },
       "connections":[2, 3],
       "expenses":{"food":1000, "gas":180}
   }
 }

假设查询是:

 SELECT * from mySample WHERE income > 300000 and age < 40

在查询过程中,Oracle NoSQL 数据库是否使用自己的索引排序搜索方法,即选择第一和第二索引(例如,收入、年龄或反之亦然)以达到最佳性能?

如果我知道我的文档的数据特征,我可以为查询指定和强制我自己的索引顺序吗?

【问题讨论】:

    标签: nosql oracle-nosql


    【解决方案1】:

    Oracle NoSQL 对于任何查询只能使用一个索引。当多个索引适用于一个查询时,它使用启发式方法来选择“最佳”索引。但是,选择的索引可能并不总是最好的。这是因为启发式方法不基于索引键统计信息,因此不计算谓词选择性。如果启发式选择被证明是错误的,Oracle NoSQL 支持索引提示,这些提示放置在查询本身中,并告诉查询处理器使用什么索引。

    对于上面的示例,根据启发式,两个索引(年龄和收入)同样好,并且查询处理器将选择名称按字母顺序排列的第一个,假设这是年龄上的那个。要强制使用收入索引,请使用以下查询:

    SELECT /*+ FORCE_INDEX(mySample) */ * 来自我的样品 WHERE 收入 > 300000 且年龄

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多