mysql - 大型SQL动态查询使系统崩溃

标签 mysql oracle

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

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/

相关文章:

mysql - 从mysql中删除重复的列值

php - joomla - 在内容表上找不到文章类别

sql - 组合行以创建两列数据

java - 如何在 JavaFX 中将 (0,0) 处的水平线和垂直线颜色加深

oracle - 如何生成 Oracle 模式的整个 DDL(可编写脚本)?

mysql - 查找给定 PK 的位置以及下一行和上一行作为一个结果行

php - 通过 PHP 登录到文件或登录到 MySQL 数据库 - 哪个更快?

sql - 选择一个表中没有出现在另一个表的外键中的所有项目

Oracle直接加载似乎会产生奇怪的结果

SQL Developer 用空格填充 char 中的剩余空间