Mysql存储树结构
Mysql存储树结构
通常在mysql中存储树形结构的方案,是通过在子节点上存储父节点编号的方案来实现的。这种方案可以很直观的体现各个节点之间的关系,通常可以满足大多数需求。
但是当数据量变大和层级关系变深后,对于部分需求(例如,判断节点是否其他节点的子节点)这样的存储方式很难满足要求。这类需求实质上需要在内存中构建一棵树,通过遍历树来给出答案。如果还是使用parent_id这种存储模型,显然需要按照树的层级关系递归向下搜索。
例如,以mysql数据库样例Employees表为例。
1 | +----------------+ |
employees表有reportsTo字段引用employeeNumber字段。描述employee之间的层级关系。
上述的存储方式,获取树的流程为:
1 | List<Employee> employees; |
上述操作是递归方式查询,查询效率仍会随着树层级深度的提高而变差。