首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

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

帮忙优化代码,查询数据是否在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中加一列“已使用”, 标记上已查到的,也可以加快速度。

热点排行