Package gudusoft.gsqlparser.sqlenv
Class BucketedIndex
Object
gudusoft.gsqlparser.sqlenv.BucketedIndex
分桶索引(SQL Server COLLATION_BASED 专用)
用于优化 SQL Server 的 schema 对象查找,将 O(N) 全表扫描优化为 O(1) + O(bucket_size)。
核心思想:
- 桶键 = ASCII lowercase + 长度(例如:"MyTable" → "mytable_7")
- 相同桶键的对象放在同一桶内(通常 < 20 个对象)
- 查找时先定位桶(O(1)),再用 Collator 比较桶内对象(O(bucket_size))
性能特性:
- 10,000 对象场景:从 ~20μs(全表扫描)优化到 ~800ns(分桶)
- 性能提升:~25x
- 内存开销:每个对象额外 ~8 bytes(HashMap overhead)
使用示例:
CollatorProvider provider = new CollatorProvider();
BucketedIndex index = new BucketedIndex(provider, "SQL_Latin1_General_CP1_CI_AS");
// 添加对象
index.put("MyTable", tableObject);
index.put("MYTABLE", tableObject2); // 同一桶(mytable_7)
// 查找对象(使用 Collator 比较)
TSQLSchemaObject found = index.get("myTable"); // CI: 能找到
- Since:
- 3.1.0.9
-
Constructor Summary
ConstructorsConstructorDescriptionBucketedIndex(CollatorProvider collatorProvider, String collationName, ESQLDataObjectType objectType) 构造分桶索引 -
Method Summary
Modifier and TypeMethodDescription查找对象(先定位桶,再 Collator 比较)获取所有对象(用于遍历)int获取桶数量(用于调试)获取桶统计信息(用于性能分析)int获取对象数量voidput(String name, TSQLSchemaObject object) 添加对象到桶booleanremove(String name, TSQLSchemaObject object) 移除对象
-
Constructor Details
-
BucketedIndex
public BucketedIndex(CollatorProvider collatorProvider, String collationName, ESQLDataObjectType objectType) 构造分桶索引- Parameters:
collatorProvider- Collator 提供者(ThreadLocal 缓存)collationName- SQL Server collation 名称objectType- 对象类型(用于日志)
-
-
Method Details
-
put
添加对象到桶- Parameters:
name- 对象名称object- schema 对象
-
get
查找对象(先定位桶,再 Collator 比较)- Parameters:
name- 对象名称- Returns:
- 找到的对象,未找到时返回 null
-
remove
移除对象- Parameters:
name- 对象名称object- 要移除的对象- Returns:
- true 如果成功移除
-
getAllObjects
获取所有对象(用于遍历)- Returns:
- 所有对象的列表
-
getBucketCount
获取桶数量(用于调试)- Returns:
- 桶的数量
-
getObjectCount
获取对象数量- Returns:
- 对象总数
-
getBucketStats
获取桶统计信息(用于性能分析)- Returns:
- 桶统计信息字符串
-