我们正在研究使用Oracle Hierarchical查询来模拟可能非常大的树结构(可能无限宽,深度为30+)。我的理解是分层查询提供了一种递归加入SQL的方法,但是如果您要手动编写等效查询,它不会提供任何实际的性能增强......是这种情况吗?使用oracle分层查询,人们有哪些体验,性能明智?Oracle分层查询性能
1
A
回答
4
那么简短的答案是,没有分层扩展(通过连接)你不能写递归查询。你可以编程地发出许多与recurisively相关的查询。
所有数据库的经验法则,特别是oracle,是如果你可以在单个查询中发布你的结果,它几乎总是比编程更快。
+2
另一个规则是不要选择比你需要更多的数据。这可能是一种折衷。 Ben实际上是否需要展示30个深度和无限宽的层次? – 2008-10-29 06:55:27
3
我的经验一直在小得多的集合,所以我不能说大多数集合中的heirarchical查询的性能如何。
在做这些树检索,你通常有以下选择
- 查询一切,组装在客户端树。
- 使用Oracle提供的内置东西(START WITH,CONNECT BY PRIOR),为树的每个级别执行一次查询,建立在您知道需要从以前的查询结果中获得的东西上
- 。
在数据库中这样做会减少不必要的往返或浪费太多的数据查询。
0
我见过使用连接可以很慢,但比较什么?除了使用递归PL/SQL调用(更慢)构建结果集或在客户端执行结果集外,没有其他选择。
您可以尝试将数据分离为映射(层次结构定义)和查找表(显示数据),然后将它们连接在一起。我想我不会期望获得很大的收益,假设你从索引字段获得层次结构数据,但值得一试。
你有没有尝试过使用连接?我非常喜欢尝试不同的变化。
1
尝试对您分层表中的数据进行分区,然后限制查询中包含的分区。
CREATE TABLE
loopy
(key NUMBER, key_hier number, info VARCHAR2, part NUMBER)
PARTITION BY
RANGE (part)
(
PARTITION low VALUES LESS THAN (1000),
PARTITION mid VALUES LESS THAN (10000),
PARTITION high VALUES LESS THAN (MAXVALUE)
);
SELECT
info
FROM
loopy PARTITION(mid)
CONNECT BY
key = key_hier
START WITH
key = <some value>;
有趣的问题现在成为您的分区策略。 Oracle提供了几个选项。
相关问题
- 1. Oracle分层查询
- 2. Oracle分层查询
- 3. Oracle SQL分层查询
- 4. Oracle查询性能
- 5. Mysql的,树,分层查询,性能
- 6. Oracle查询性能问题
- 7. 性能调优Oracle查询
- 8. Oracle SQL查询性能
- 9. Oracle嵌套查询性能
- 10. Oracle查询性能问题
- 11. 跨多个表的Oracle分层查询
- 12. Oracle中的分层查询 - 失控?
- 13. 将Oracle分层查询转换为MariaDB
- 14. Oracle SQL优化:分层查询
- 15. 在Oracle中的分层查询
- 16. oracle sql查询顶层查询层次结构查询
- 17. 分层查询
- 18. 分层查询
- 19. Oracle分层查询:如何包含顶层父项
- 20. 分层SQL查询
- 21. 分层SOQL查询
- 22. Oracle查询的性能变化
- 23. 性能调优现有Oracle查询
- 24. 的Oracle 11g:查询性能优化
- 25. Oracle性能查询解释计划
- 26. 积极跟踪Oracle查询性能
- 27. Oracle SQL查询可选参数性能
- 28. 提高在Oracle SQL查询性能
- 29. DB2分页查询性能
- 30. 具有分层关系的SQL查询中的性能问题
得出任何结论? – ScottCher 2008-11-03 14:36:57