主要代码如下显示,利用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;
}
还有没有别的好的解决方法?????
望各位不吝指教。
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.在对应的列上建索引:关于索引如何创建 网上可以搜到
注意where后面经常用到的列都要创建索引 可以创建组合索引
2.select 时避免使用LIKE %***%
贴的代码是分页显示用的,pagesize为13,每页显示13条数据,每页都要连接、断开数据库,这点是不是影响速度????