有一表A,表中有一字段id(char),top(char),path(char)
id是主键,top是根结点id,path是本结点从顶层到本结点所经过的结点的id串成的字符串
整个表的记录则形成一棵棵"树"例如,表A中有以下记录:
id top level path
-----------------------------------------------
........
1001 1001 1 1001
2001 1001 2 10012001
2002 1001 2 10012002
2003 1001 2 10012003
3001 1001 3 100120023001
3002 1001 3 100120023002
4001 1001 4 1001200230014001
5001 1001 5 10012002300140015001
1111 1111 1 1111
2111 1111 2 11112111
.......
我想在path字段上建立索引,以提高以下操作的效率:查询某结点的孩子和查询某结点以下子树的所有结点我的问题是:
path字段应该怎样建立,查询的效率会比较高?
是按上面的的方法构造,即从根结点id一直到本结点id的字符串,这样好呢?
还是,从根结点id到本结点id的双亲字符串,即:
id top level path
-----------------------------------------------
........
1001 1001 1 NULL
2001 1001 2 1001
2002 1001 2 1001
2003 1001 2 1001
3001 1001 3 10012002
3002 1001 3 10012002
4001 1001 4 100120023001
5001 1001 5 1001200230014001
1111 1111 1 NULL
2111 1111 2 1111
.........
这样好呢?同样是搜索结点2002的下一层孩子结点,和2002以下子树所有结点,
按第一种方法构造,查询语句则分别为:
select * from A where path like '10012002%' and path<>'10012002' and level=3(查下一层)
select * from A where path like '10012002%' and path<>'10012002' (查下层所有)按第二种方法构造,查询语句则分别为:
select * from A where path = '10012002' (查下一层)
select * from A where path like '10012002%'  (查下层所有)我有朋友说支持第一种方法,原因是这样构造可以让每个结点的path有唯一值,说这样做,索引的过滤因子比较小,查询效率可以更高。
各位认为,是第一种构造方法的效率高,还是第二种购房方法的效率高呢?
如果可以的话,请各位详细分析一下原因。
非常感谢啦!!