7.1 等值查找
SQL
SELECT *
FROM Orders
WHERE CustomerID='MAISD'
SPL
像 CustomerID 这种字符串 ID 类的主键字段,一般常用的查找方式都是等值查找,不太会用上区间,这种方式既可以用哈希索引,也可以用排序索引。
哈希索引:
A | |
---|---|
1 | =file(“Orders.ctx”).open() |
2 | =A1.index(file(“Orders.ctx__idh”):1000000;CustomerID) |
3 | =A1.icursor(;CustomerID==“MAISD”;file(“Orders.ctx__idh”)).fetch() |
4 | =A1.close() |
A2 在组表 A1 上为字段 CustomerID 创建索引,索引文件名为 Orders.ctx__idh。1000000 为哈希索引的哈希值范围,只要用了这个参数,就表示该索引为哈希索引
A3 icursor() 用索引条件过滤组表并返回单路游标
排序索引:
A | |
---|---|
1 | =file(“Orders.ctx”).open() |
2 | =A1.index(file(“Orders.ctx__ids”);CustomerID) |
3 | =A1.icursor(;CustomerID==“MAISD”;file(“Orders.ctx__ids”)).fetch() |
4 | =A1.close() |
A2 不写哈希值范围参数,就自动是排序索引了
排序索引做等值查找时,在每级索引中要做二分查找,比哈希方法的直接定位稍慢一点。但外存查找的主要时间消耗在数据读取,而不是 CPU 运算,所以两者差别不算很大。由于排序索引的适应面更广,所以绝大多数的外存索引都是排序索引。只有个别有极端性能要求,且只需要实现等值查找的场景才会使用哈希索引。