大型 SQL 动态查询导致系统崩溃



我们有一个类似于下面的动态值查询。

Select * from table where dynamic value

所以在这里,部分动态值取决于用户的一些值,所以假设用户与一家公司相关联,那么查询将是

Select * from table where company is xyz and id is 123但现在让我们假设如果用户与百万公司相关联,那么查询将是

Select * from where company is 1 and id is 1 or ... company is n and id is n

这里 n 是公司价值的数量。在这里,此查询显然需要时间来执行。 有什么方法可以优化它,这样系统就不会崩溃。可能还有其他一些设计方法,但现在我们正在寻找优化查询选项。

编辑:

变量名称是公司和ID,它不会改变,但它们的值会动态出现。 所以基本上如果用户有 1000 家公司,那么 for 循环将运行 1000 次,并且该值每次都会添加到公司和 ID 中 where 条件 这里只是一个前任。

StringBuilder sql = "select * from table where ";
StringBuffer query = new StringBuffer();
for(int i=0;i<user.company.size;i++){
query+="(company is" + user.company[i]+"AND id is" + user.id[i]+") OR";
}
sql.append(query)

您可以在 Oracle 和 MySQL 中使用IN条件。

select * from where company IN (1, ..., n) and id in (1, ..., n);

剩下的就是如何在IN内生成内容。

最好的过程取决于你期望的数字'n'是什么:如果大多数时候它很高,那么你最好创建一个临时表,将这些值放入其中,然后与数据表连接。即使对于较小的值"n",这也应该没问题。这也有一个附带的好处,即您的查询将始终相同。

最新更新