我们有一个类似于下面的具有动态值的查询。
Select * from table where dynamic value
因此,这里的部分动态值实际取决于用户的某些值,所以可以说,如果用户与一家公司关联,那么查询将是
从公司为 xyz、id 为 123 的表中选择 *
但现在让我们假设,如果用户与百万家公司关联,那么查询将是
Select * from where company is 1 and id is 1 or ... company is n and id is n
这里 n 是公司值(value)的数量。这里这个查询显然需要时间来执行。 有什么办法可以优化这个,这样系统就不会崩溃。可能在设计方面还有其他一些方法,但现在我们正在寻找优化查询选项。
编辑:
变量名称是公司和 ID,它不会改变,但它们的值会动态变化。所以基本上如果用户有 1000 个公司,那么 for 循环将运行 1000 次,并且每次都会将值添加到 where 条件下的公司和 id 这里只是一个前任。
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
中的内容了。
关于mysql - 大型SQL动态查询使系统崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896127/