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
它没有采用多个索引,如果它将使两个索引性能都会提高。
问题:如何查询多个索引。
注意:条件应该相同
答案 0 :(得分:2)
This article涵盖了进度中的多个索引选择
在论文中,他们提到了以下内容:
当选择标准包括使用AND时,不止一个 当涉及每个索引的所有组件时,将使用index 在平等匹配中,索引不是唯一的。
在您的查询中,您没有指定国家/地区和州,因此我不相信多重索引会启动。
进度不会使用for中的数据量来确定要使用的索引。我将假设使用cs-id,与使用车辆的idx2相比,em-id返回的行数更少,因此强制进度使用idx1,如下所示
对于每个客户NO-LOCK WHERE customer.cs-id =“ABC”AND customer.em-id =“123”AND customer.vehicle = YES USE-INDEX idx1: 显示客户。 END。
答案 1 :(得分: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.
答案 2 :(得分:0)
我不确定为什么要使用这两个索引,使用正确的索引是重要的。使用索引允许进度返回最少量的数据,因为您使用的是cs_id&这意味着index2在大多数情况下都是有效的。
如果你有一个非常大的数据库,其中有很多记录仍在idx2中,或者你经常需要根据你指定的三个字段找到记录,那么创建一个包含所有三个字段的第三个索引可能是值得的。
idx3 cs-id em-id vehicle
如果您想强制OpenEdge使用多个索引并且您使用AND运算符,那么您必须满足以下所有条件: