确认
当前程序版本
3.5.6
问题描述
数据库字段 object_id 是字符串类型,索引 idx_module_version(module, object_id, object_version)
public List<DependencyChainVo> getDenpencyChain(Long objectId, String version, String module) {
// 获取依赖关系
LambdaQueryWrapper<DependencySnapshot> query = Wrappers.lambdaQuery();
query.eq(DependencySnapshot::getObjectId, objectId)
.eq(DependencySnapshot::getObjectVersion, version)
.eq(DependencySnapshot::getModule, module);
query.eq(DependencySnapshot::getObjectId, objectId) 没有类型校验,导致出现隐式的类型转换
最终导致 mysql 索引不生效
生成的sql如下
explain analyze SELECT id FROM dependency_snapshot WHERE module = 'COMPONENT' AND object_id = 120185 AND object_version = '2.0.0'
能走索引的sql应该是
explain analyze SELECT id FROM dependency_snapshot WHERE module = 'COMPONENT' AND object_id = "120185" AND object_version = '2.0.0'
希望能有类型强校验,避免出现这种隐式的类型转换,提前发现可能导致索引不生效的问题
详细堆栈日志
No response
Comment From: miemieYaho
目前不考虑