读书人

帮忙优化代码查询数据是不是在40个表

发布时间: 2013-08-27 10:20:47 作者: rapoo

帮忙优化代码,查询数据是否在40个表中被使用
需要判断表A中的一列数据,是否有在其他表中使用过。

比如图中,A1、A2在表B中使用过,A2、A3在表C中使用过,A4在两个表中都没有使用过。

帮忙优化代码,查询数据是不是在40个表中被使用

需要检查的表有40多个。数据库用的是ORACLE。
现在查100条数据需要8秒左右,但我需要查的数据有30万条左右,所以我现在的代码效率让人很捉急。
希望大家帮我看看哪里可以优化的,或者有更好的实现办法。

帮忙优化代码,查询数据是不是在40个表中被使用

现在我的代码是这样的:

internal static List<model.模型1> Get()
{
DataTable dt = new DataTable();
string sql_get_all = "SELECT 列1 FROM 表A";
dt = new DbHelperOra.Query(sql_get_all).Tables[0];
List<model.模型1> list模型1 = new List<model.模型1>();
foreach (DataRow dr in dt.Rows)
{
model.模型1 model模型1 = new model.模型1();
model模型1.列1 = dr["列1"].ToString();
model模型1.是否被使用 = 列1是否被使用(dr["列1"].ToString());
list模型1.Add(model模型1);
}
return list模型1;
}
private static string 列1是否被使用(string 列1)
{
string result = "N";
string[] sqls = {
"SELECT 1 FROM 表B WHERE 列1=:列1",
"SELECT 1 FROM 表C WHERE 列1=:列1"
//此处省略40条SQL语句
};
foreach (string sql in sqls)
{
DataTable dt = new DataTable();
OracleParameter[] optrs = {
new OracleParameter("列1",OracleType.NVarChar,11)
};
optrs[0].Value = 列1.Trim();
dt = new DbHelperOra().Query(sql, optrs).Tables[0];
if (dt.Rows.Count > 0)
{


result = "Y";
break;
}
}
return result;
}


[解决办法]
sql语句中,用not in 判断
[解决办法]
是否可以用另一个表把这些字段的值保存下来,然后添加一个字段区分字段的值对应哪一个表。从设计入手试试
[解决办法]
不要一条条处理表A的数据。要一次过查询。
[解决办法]
40次查询是少不了的,合并查询只会更慢,剩下的思路除了你已经做的调整顺序只剩下单条sql的优化

建议使用临时表,把你的外循环中那个表先塞进临时表,然后通过40条sql去更新这个临时表中的字段,最后一次性select出来返回
[解决办法]
在表A中加一列“已使用”, 标记上已查到的,也可以加快速度。

读书人网 >C#

热点推荐