我有一个遗留系统,允许用户管理(MySQL)数据库中称为“TRANSACTION”的一些实体,并映射到Java中的Transaction类。事务对象有大约30个字段,其中一些是DB中的列,其中一些是连接到另一个表,如CUSTOMER,PRODUCT,COMPANY和类似的东西。在数据库中灵活搜索
用户可以访问“搜索”屏幕,在这里可以使用TransactionId和一些额外的字段进行搜索,但他们需要更多的灵活性。基本上,他们希望能够使用TRANSACTION或任何链接表中的任何字段进行搜索。
我不知道如何使搜索既灵活又快速。有什么办法吗?我不认为有一个索引每列组合是一个有效的解决方案,但全表扫描也是无效的......是否有任何合理的设计?我使用Criteria来构建查询,但这不是问题。
另外,我认为mysql没有使用正确的索引,因为当我使hibernate登录sql命令时,几乎总是可以通过强制索引来改善响应时间......我开始使用类似this trick适用于强制使用特定索引的标准,但我并不为“if”链感到自豪。我越来越像
if(queryDto.getFirstName() != null){
//force index "IDX_TX_BY_FIRSTNAME"
}else if(queryDto.getProduct() != null){
//force index "IDX_TX_BY_PRODUCT"
}
,如果问题是“过于开放”,我认为这是一个典型的问题,感觉太可怕了
很抱歉,但我不能找到一个好办法