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

数据库查询很慢,请求改进一下 谢谢了
我的数据库是这样设计的  
id typename parentid
01151811010101030103 李明 011518110101010301

id和pid 现在采用VerChar类型  
id 是子类id, parentid 是父类ID  
通过父类可以查看到所有的子类

每二个数字是一级 最多有10级 也就是20位字符 这样的循环绑定 数据量大约在1W条



web页面用TreeView显示

数据处理用
C# code
void BindData()
    {
        DataSet ds = new XJBLL.xjBookType().GetList("");
        TreeView1.Nodes.Clear();
        TreeNode node = new TreeNode();
        node.Value = ds.Tables[0].Rows[0]["ID"].ToString();
        node.Text = ds.Tables[0].Rows[0]["TypeName"].ToString();
        node.Expand();
        TreeView1.Nodes.Add(node);
        BindChild(node, node.Value);
    }
    void BindChild(TreeNode node, string ParentID)
    {
        DataSet ds = new XJBLL.xjBookType().GetList(" and ParentID='" + ParentID + "' ");
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            TreeNode childnode = new TreeNode();
            childnode.Value = ds.Tables[0].Rows[i]["ID"].ToString();
            childnode.Text = ds.Tables[0].Rows[i]["TypeName"].ToString();
            node.ChildNodes.Add(childnode);
            BindChild(childnode, childnode.Value);
        }
    }  





现在打开这个页面 大概在30秒后显示 出内容且SQL数据库占用很高的CPU 请求有没有别的办法 提高数据处理的速度 谢谢了

------解决方案--------------------
parentID=过滤就可以

例子

C# code
  public System.Data.DataTable dt;
  protected void Page_Load(object sender, EventArgs e)
  {    
    if (!IsPostBack)
    {
      dt = new System.Data.DataTable();
      dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.String)));
      dt.Columns.Add(new System.Data.DataColumn("TypeName", typeof(System.String)));
      dt.Columns.Add(new System.Data.DataColumn("ParentID", typeof(System.String)));
      dt.Rows.Add("01", "根", "");
      dt.Rows.Add("0101", "子类1", "01");
      dt.Rows.Add("0102", "子类2", "01");
      dt.Rows.Add("0103", "子类3", "01");

      dt.Rows.Add("010101", "子类1_1", "0101");
      dt.Rows.Add("010102", "子类1_2", "0101");
      dt.Rows.Add("010103", "子类1_3", "0101");
      //以上数据可以从数据库查询
      BindData();
    }
  }
  void BindData()
  {
    TreeView1.Nodes.Clear();
    TreeNode node = new TreeNode();
    node.Value = dt.Rows[0]["ID"].ToString();
    node.Text = dt.Rows[0]["TypeName"].ToString();
    node.Expand();
    TreeView1.Nodes.Add(node);
    BindChild(node, node.Value);
  }
  void BindChild(TreeNode node, string ParentID)
  {
    System.Data.DataRow[] dr = dt.Select("ParentID='" + ParentID + "'","ID");
    for (int i = 0; i < dr.Length; i++)
    {     
      TreeNode childnode = new TreeNode();
      childnode.Value = dr[i]["ID"].ToString();
      childnode.Text = dr[i]["TypeName"].ToString();
      node.ChildNodes.Add(childnode);
      BindChild(childnode, childnode.Value);
    }
  }