mysql - 分层查询优势

标签 mysql postgresql recursive-query

我有一些巨大的数据库表,里面充满了科学名称,在父子关系中,就像这样......

TAXON | PARENT
Mammalia | Chordata
Carnivora | Mammalia
Canidae | Carnivora
Canis | Canidae
Canis-lupus | Canis

我安装了 PostgreSQL 并开始处理分层查询,但它比我想象的要复杂得多。所以我正在考虑坚持使用 MySQL 并回到我原来的方案,它看起来像这样:

TAXON | PARENT | FAMILY | ORDER
Mammalia | Chordata | (NULL) | (NULL)
Carnivora | Mammalia | (NULL) | Carnivora
Canidae | Carnivora | Canidae | Carnivora
Canis | Canidae | Canidae | Carnivora
Canis-lupus | Canis | Canidae | Carnivora

它看起来很业余,但我惊讶地发现生命目录显然使用相同的方案,列数更多,行数超过一百万。

通过这个方案,我可以通过简单地计算匹配 Table.Family > Canidae 的物种数量来计算子孙。而且我可以使用一系列“阶梯式”查询来找出曾祖 parent 的名字等。

所以我想知道分层查询的好处是什么。它们更优雅,您大概可以只用一个或两个查询来完成所有事情,而不是一系列查询。我还假设它们更快,尽管我的原始查询(带有两个额外字段)已经足够快了。

分层查询是否有一些额外的显着优势可以证明我雇人来设置一个,还是主要只是速度问题?

最佳答案

递归/分层查询实际上通常更慢。它会有所不同 - 有更多的行,但另一方面每行要小得多。

主要优势是灵 active ,而不是性能。在您的表中,您有一定数量的列......但是如果最终父级(根)和最终子级(叶)之间存在任何数量的可能步骤怎么办?或连接和打开的分支,以便一个对象有两个父对象?这就是分层查询变得更有用的时候。

关于mysql - 分层查询优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33446883/

相关文章:

mysql - 选择字段为非空的所有项目

postgresql - 具有自引用连接条件的 Postgres 计数

java - 我如何从Java连接到mysql服务器?

MySQL - 根据其他表更新用户数据

mysql - Ruby on Rails - 获取 MySql 数据库大小

postgresql - 如何在 PostgreSQL 的函数内传递变量

php - MySQL/PHP - 查找可用的时间段

database - 我可以使 postgreSQL 可再分发吗?

SQL 多条件 CTE 递归

sql-server - sql server如何检索树中从任何 child 到祖先的所有节点?