在开发中,我们经常使用树形结构来展示菜单选项或者组织结构。一般的数据库设计,都采用id,parent_id 的模式来表达树形关系。但是要提取树的节点,必须要用递归算法,多次连接数据库,导致效率比较低下。

本文提出一种优化方案:

  1. 为数据结构增加一个全路径字段(也可以独立关联表)。每个节点都可以有一个从根节点开始到本节点的路径。如宇宙->银河系->太阳系->地球->中国。这个路径需要维护,每个节点改变了归属关系,都要把此节点相关的记录找出来重算。而且需要一定的储存空间,但这一字段可以存在另一个表里,不影响原表。
  2. 维护好路径后,就可以快速查找了。以路径字段为排序字段来提取以某个节点为根的整个树。提取的节点当然也是以路径来比较。你会发现记录全部会与递归算法算出的排列顺序一样。所不同的是递归算法算出来的有层次,而现在的没有层次。可以在程序中对数据进行层次化解析。这样只需要一次数据库连接,大大提高效率。
  3. 层次结构调整算法。在组织结构进行调整时,需要把原来的路径也需要同步调整,方法也是一样,直接调整前序为原来的路径的替换为新的前序路径即可。

树形数据库查询优化方案相关推荐

  1. SqlServer千万级以上的数据表查询优化方案《冷热数据库分离》的思路

    1.是分库而不是分表,分表即需要考虑引入分表算法,又影响后续查询. 2.热数据只占全部数据的一部分,因此每次优先查询热库,以下情况才查询冷库 --a.当查询条件未命中(结果集为空)时,查询冷库.   ...

  2. Mysql数据库千万级数据查询优化方案

    Mysql数据库中一个表里有一千多万条数据,怎么快速的查出第900万条后的100条数据? 面试官问:Mysql数据库千万级数据查询优化方案- 首先创建一张表,里面模拟了1000w数据: CREATE ...

  3. mysql 百万级数据库优化方案【转】

    一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...

  4. Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结

    Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结 1. 注册表是树形数据库 1 2. 注册表的由来 1 3. Java  操作注册表 2 3.1. 使用Preferences  ...

  5. SQL Server数据库优化方案

    SQL Server数据库优化方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计 ...

  6. mysql慢查询优化方案

    文章目录 1. 分页查询优化 2. 最左前缀原则,覆盖索引优化 ①:覆盖索引优化 ②:索引下推优化 like xx% ③:Order by与Group by优化 ④:长字符串前缀索引优化 ⑤:避免小基 ...

  7. php多表查询性能优化,MSSQL_SQL Server多表查询优化方案集锦,SQL Server多表查询的优化方案是 - phpStudy...

    SQL Server多表查询优化方案集锦 SQL Server多表查询的优化方案是本文我们主要要介绍的内容,本文我们给出了优化方案和具体的优化实例,接下来就让我们一起来了解一下这部分内容. 1.执行路 ...

  8. SQL数据库不用SQL语句能显示全表的内容_MySQL百万级数据库优化方案

    一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...

  9. 数据库查询优化技术(一):数据库与关系代数

    数据库查询优化技术 学习笔记(一) 我是看李海翔的<数据库技术丛书·数据库查询优化器的艺术:原理解析与SQL性能优化>这本书的视频讲解学习的,因为数据库的知识学的不多,直接看优化有些吃力, ...

最新文章

  1. 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据
  2. RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析
  3. 【云端大数据实战】大数据误区、大数据处理步骤分析
  4. 深度学习总结:GAN,原理,算法描述,pytoch实现
  5. 从JDK 6升级到JDK 7过程中遇到的一个问题(卸载rpm)
  6. E:Johnny and Grandmaster
  7. lisp 车位块自动编号_机械车位做产权登记,真的适合吗?
  8. Liferay开发学习Part6:Service Builder
  9. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...
  10. CSS3中的过渡、动画和变换
  11. IOS contentOffset该如何理解
  12. 服装管理解决方案丨汇信
  13. DCEP即将破茧成蝶,数字货币新革命来了
  14. kafka 分区多节点消费
  15. el-form的入门学习
  16. 2021-04-12
  17. Yamaha DGX660 电钢琴aux-in只响一边的处理记录
  18. 浏览器调用桌面程序方法
  19. Java1.7版本解码base64_JDK Base64 编解码 1.7 和 1.8 的坑
  20. 51单片机定时器的查询和进入中断处理

热门文章

  1. 3A企业信用等级证书认证
  2. VS的使用小tips
  3. 升级cocoapods
  4. OC学习2021-08
  5. FPGA编程中打拍的目的
  6. 【练一下1】糖尿病遗传风险检测挑战赛 【讯飞开放平台】
  7. Linux串口输出启动信息,linux开发板启动过程串口打印信息
  8. 【鸽子木 · 每日一题】比赛安排(3月28日)
  9. 爱聊语音聊天室为什么用不了摄像头?
  10. 【OpenCV】 级联分类器训练模型