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
使用了多个索引,如果同时使用两个索引,性能就会提高。
问题:如何查询多个索引。
注意:条件应该相同
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
使用了多个索引,如果同时使用两个索引,性能就会提高。
问题:如何查询多个索引。
注意:条件应该相同
本文涵盖了进行中的多个索引选择
在文章中,他们提到了以下内容:
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:显示客户。结尾。
我不确定你为什么要使用这两个索引,使用正确的索引很重要。使用索引可以让进度返回最少的数据量,并且由于您使用的是 cs_id 和车辆,这意味着 index2 在大多数情况下都是有效的。
如果您有一个非常大的数据库,其中仍有大量记录在 idx2 中,或者您经常需要根据您指定的三个字段查找记录,那么创建包含所有三个字段的第三个索引可能是值得的。
idx3 cs-id em-id 车辆
如果要强制 OpenEdge 使用多个索引并且使用 AND 运算符,则必须满足以下所有条件:
如果要使用两个索引,则必须在查询中使用所有索引字段:
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.