0
FOR EACH customer no-lock where cs-id = "ABC" AND em-id = "123" AND  vehicle = YES:
    Display customer.  
END.

INDEX
 idx1  cs-id  em-id country state 
 idx2   cs-id vehicle  

我的查询只idx2使用了多个索引,如果同时使用两个索引,性能就会提高。

问题:如何查询多个索引。

注意:条件应该相同

4

3 回答 3

2

本文涵盖了进行中的多个索引选择

在文章中,他们提到了以下内容:

When the selection criteria includes the use of AND, more than one index will be used when all the components of each index are involved in equality matches , and the indexes are not unique.

在您的查询中,您没有指定国家和州,所以我不相信多重索引会起作用。

Progress 不使用 for each 中的数据量来确定使用哪个索引。我将假设使用 cs-id,em-id 与使用车辆的 idx2 相比返回更少的行,因此强制进度使用 idx1 如下

FOR EACH customer NO-LOCK WHERE customer.cs-id = "ABC" AND customer.em-id = "123" AND customer.vehicle = YES USE-INDEX idx1:显示客户。结尾。

于 2013-05-21T15:54:10.753 回答
0

我不确定你为什么要使用这两个索引,使用正确的索引很重要。使用索引可以让进度返回最少的数据量,并且由于您使用的是 cs_id 和车辆,这意味着 index2 在大多数情况下都是有效的。

如果您有一个非常大的数据库,其中仍有大量记录在 idx2 中,或者您经常需要根据您指定的三个字段查找记录,那么创建包含所有三个字段的第三个索引可能是值得的。

idx3 cs-id em-id 车辆

如果要强制 OpenEdge 使用多个索引并且使用 AND 运算符,则必须满足以下所有条件:

  • 所有匹配都是相等匹配。
  • 所有索引都是非唯一索引。
  • 包括索引的所有组成部分。
于 2013-05-22T07:13:53.000 回答
0

如果要使用两个索引,则必须在查询中使用所有索引字段:

FOR EACH customer no-lock 
    where cs-id = "ABC" 
    AND em-id   = "123" 
    and country = "XX"
    and state   = "YY
    AND vehicle = YES:
    Display customer.  
END.
于 2013-05-22T06:09:30.930 回答