我有一些巨大的数据库表,里面充满了科学名称,在父子关系中,就像这样......
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/