在MYSQL中执行递归存储过程以获取分层数据

时间:2008-10-21 08:47:15

标签: mysql

我有桌子员工,
雇员 ( emp_id int主键, emp_name varchar(50), mngr_id int)

这里mngr_id将为null或包含有效的emp_id。这样就形成了组织中员工的层次结构。

为了遍历整个层次结构,我必须编写递归存储过程。 (在Oracle中,通过使用CONNECT BY很容易...... START WITH)

所以问题是,鉴于层次结构的级别不会超过10个级别,这种存储过程的性能影响是什么!

还有其他方法可以实现同样的目标吗?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

关于最后一个问题:"What is the most efficient/elegant way to parse a flat table into a tree?"

有一些不错的选择

您还应该考虑在中间表中缓存递归的结果。如果仅在更新到层次结构表时更改它,则递归性能命中可以忽略不计。

编辑: 就个人而言,我会在我的应用程序的表示层中进行递归,例如在Web服务器上。与SQL中可实现的功能相比,这提供了更大的灵活性,您还可以使用会话或应用程序级缓存。 (尽管使用预先构建的DB表来保持最新的触发器,但永远不会让您使用过时的缓存。)

答案 2 :(得分:0)

Tomalak:“......我会在我的应用程序的表示层中进行递归...”

这意味着每次递归发生时,另一个调用将从表示层发送到数据库服务器。那将是非常缓慢的。