日期:2014-05-17  浏览次数:20757 次

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

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



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



现在我的代码是这样的:
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)
        {