主要代码如下显示,利用SqlParameter注入方式。数据库中数据量在80W左右时效率还挺快,随着数据量增长,目前达130W以上,查询效率明显下降。打算用视图解决,初步计划用多个视图,分别显示不同时间段内数据,如2天,1个月,3个月,6个月,1年等。在查询前判断where中时间间隔,然后选择相应的视图。但视图多了,查询频繁时,是不是也会影响性能。
   还有没有别的好的解决方法?????
   望各位不吝指教。
public static DataTable GetList(string tablename,string flist,string order,string where,int pagesize,int index)
        {
            SqlParameter[] parameters = {
new SqlParameter("@TableName", SqlDbType.VarChar, 200),
new SqlParameter("@Fields", SqlDbType.VarChar, 5000),
                    new SqlParameter("@OrderField", SqlDbType.VarChar, 5000),
                    new SqlParameter("@sqlWhere", SqlDbType.VarChar, 2000),
                    new SqlParameter("@pageSize", SqlDbType.Int),
                    new SqlParameter("@pageIndex", SqlDbType.Int),
                    new SqlParameter("@TotalPage", SqlDbType.Int),
};
            parameters[0].Value = tablename;
            parameters[1].Value = flist;
            parameters[2].Value = order;
            parameters[3].Value = where;
            parameters[4].Value = pagesize;
            parameters[5].Value = index;
            parameters[6].Value = 1;            return RunProce("ViewByPage", parameters);
        }public static DataTable RunProce(string storedProcName, IDataParameter[] parameters)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                SqlDataAdapter sqlDA = new SqlDataAdapter();
                sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                sqlDA.Fill(dataSet, "ds");
                connection.Close();
                return dataSet.Tables[0];
            }
        } private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command = new SqlCommand(storedProcName, connection);
            command.CommandType = CommandType.StoredProcedure;
            foreach (SqlParameter parameter in parameters)
            {
                command.Parameters.Add(parameter);
            }
            return command;
        }

解决方案 »

  1.   

    不需要视图 当初做的数据库表数据都在400完甚至几亿 都可以正常查询
    1.在对应的列上建索引:关于索引如何创建 网上可以搜到
       注意where后面经常用到的列都要创建索引 可以创建组合索引
    2.select 时避免使用LIKE %***%
      

  2.   


    贴的代码是分页显示用的,pagesize为13,每页显示13条数据,每页都要连接、断开数据库,这点是不是影响速度????