首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊mysql的树形结构存储及查询

序 本文主要研究一下mysql的树形结构存储及查询 存储parent 这种方式就是每个节点存储自己的parent_id信息 建表及数据准备CREATE TABLE `menu` ( `id` int...,就是要在sql里头查询树比较费劲,一般是加载到内存由应用自己构造 存储path 这种方式在存储parent的基础上,额外存储path,即从根节点到该节点的路径 建表及数据准备CREATE TABLE...level3a-2a | | level3b-2a | | level2b | | level3c-2b | | level3d-2b | +--------------+ 好处是通过lft进行范围...(该节点的lft,rgt作为范围)查找就可以,缺点就是增删节点导致很多节点的lft及rgt都要修改 小结 存储parent的方式最为场景,一般树形结构数据量不大的话,直接在应用层内存构造树形结构和搜索...存储path的好处是可以借助path来查找节点及其子节点,缺点就是移动node需要级联所有子节点的path,比较费劲 MPTT的方式好处是通过lft进行范围(该节点的lft,rgt作为范围)查找就可以,

4.2K30

聊聊mysql的树形结构存储及查询

序 本文主要研究一下mysql的树形结构存储及查询 存储parent 这种方式就是每个节点存储自己的parent_id信息 • 建表及数据准备 CREATE TABLE `menu` ( `id` int...,就是要在sql里头查询树比较费劲,一般是加载到内存由应用自己构造 # 存储path >这种方式在存储parent的基础上,额外存储path,即从根节点到该节点的路径 - 建表及数据准备 CREATE...level3a-2a | | level3b-2a | | level2b | | level3c-2b | | level3d-2b | +--------------+ ``` 好处是通过lft进行范围...(该节点的lft,rgt作为范围)查找就可以,缺点就是增删节点导致很多节点的lft及rgt都要修改 小结 • 存储parent的方式最为场景,一般树形结构数据量不大的话,直接在应用层内存构造树形结构和搜索...• 存储path的好处是可以借助path来查找节点及其子节点,缺点就是移动node需要级联所有子节点的path,比较费劲 • MPTT的方式好处是通过lft进行范围(该节点的lft,rgt作为范围)查找就可以

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql之存储引擎 体系结构 查询机制(二)

    3,不管表采用什么样的存储引擎,都会在数据区,产生对应 ,不管表采用什么样的存储引擎,都会在数据区,产生对应的一个 的一个frm文件(表结构定义描述文件) csv存储引擎 数据存储以 数据存储以CSV文件...二 理解mysql体系结构 1,Connectors 接入方 支持协议很多 2,Management Serveices & Utilities: 系统管理和控制工具例如:备份恢复,mysql复制集群等...( 简单认为存储了一个 key-value 结构, key 为 sql , value 为 sql查询结果集) query_cache_type 值: 0 -– 不启用查询缓存 ,默认值 ; 值:...对数据使用一个外部的文件内容进行了排序,而不是按照表内的索引进行排序读取 Using temporary : 使用临时表保存中间结果,也就是说mysql 在对查询结果排序时使用了临时表,常见于order...COUNT(*) 操作,不必等到执行阶段在进行计算,查询执行计划生成的阶段即可完成优化 4 查询执行引擎 调用插件式的存储引擎的原子 API 的功能进行执行计划的执行 5 返回客户端 1 、 有需要做缓存的

    79140

    Mysql存储结构

    索引是一种加快查询速度的数据结构,常用索引结构有hash、B-Tree和B+Tree。本节通过分析三者的数据结构来说明为啥Mysql选择用B+Tree数据结构。 数据结构 Hash ?...hash是基于哈希表完成索引存储,哈希表特性是数据存放是散列的。 优点: 等值查询快,通过hash值直接定位到具体的数据。...(符合磁盘的预读特性),顺序查询性能更高 Mysql为什么选择B+Tree ?...Mysql官网文档中写到InnoDB索引用的是 B-tree,但是底层用的是B+Tree。Mysql存储数据是以页为单位,默认一个页可以存放16K数据。...MySQL查询过程是按页加载数据的,每加载一页就是一次IO操作,B+Tree进行三次IO可以查询6700W数据量。从这里也可以知道Mysql一般设置三层深度就足够了。

    87420

    MySQL InnoDB 存储结构

    MySQL InnoDB 存储结构 InnoDB存储引擎的关键特性包括: 插入缓冲(Insert Buffer) 两次写(Double Write) 自适应哈希索引(Adaptive Hash Index...,实际数据保存在BLOB页中,数据页只保存数据的前768字节(老的文件格式),新的文件格式(Barracuda)采用完全行溢出的方式,数据页只保存20个字节的指针,BLOB也保存所有数据 数据页的结构...Header(页头)–>56byte Infimun+Supremum Records User Records(用户记录,即行记录) Free Space(空闲空间) Page Directory(页目录...缓冲池通常是通过LRU算法进行管理,同时还加入midpoint位置,新读取的页,将不会放到链表头端,而是放到midpoint的位置,默认配置下,该位置位于5/8处 参考: 高性能MySQL 第3版 MySQL...技术内幕-InnoDB存储引擎 第2版

    1.5K40

    【重学 MySQL】十、MySQL 目录结构与源码

    【重学 MySQL】十、MySQL 目录结构与源码 主要目录结构 MySQL的主要目录结构通常包括安装目录和数据目录两部分,这些目录包含了MySQL运行所需的各种文件。...数据目录的具体位置可以在MySQL的配置文件(如my.cnf或my.ini)中指定,也可以通过SQL语句SHOW VARIABLES LIKE 'datadir';查询。...以下是对MySQL源码的一些关键方面的介绍: 源码结构 MySQL的源码结构通常包括多个子目录和文件,这些目录和文件按照不同的功能和模块进行组织。...接受连接:当客户端发起连接请求时,MySQL服务器会接受这个请求,并创建一个新的连接线程来处理这个连接。 身份验证:连接建立后,客户端会发送登录凭证(如用户名和密码)给服务器进行身份验证。...优化器:对SQL语句进行优化,选择最优的执行计划。 执行器:根据优化器选择的执行计划执行SQL语句,并返回结果给客户端。

    20810

    MySQL InnoDB索引:存储结构

    1.1 InnoDB逻辑存储结构 MySQL表中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:...; 匹配范围值:范围查询,比如>,like等; 匹配某一列并范围匹配另外一列:精确查找+范围查找; 只访问索引查询:索引覆盖,select的字段为主键; 范围查询后的条件不会走索引,具体原因会在下一节进行介绍...————《引用自高性能 MySQL 》 当想 MySQL实例发送一个请求时, MySQL按照如下图的方式进行查询: image.png 客户端先发送一条查询给服务器; 服务器先检查查询缓存,如果命中了缓存...,则立刻返回给存储在缓存中的结果,否则进入下一个阶段; 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划; MySQL 根据优化器生成的执行计划,调用存储引擎的API来执行查询; 将结果返回客户端...范围查询之后的条件不走索引 根据 MySQL的查询原理的话,当处理到where的范围查询条件后,会将查询到的行全部返回到服务器端(查询执行引擎),接下来的条件操作在服务器端进行处理,这也就是为什么范围条件不走索引的原因了

    1.2K20

    MYSQL Innodb逻辑存储结构

    这几天在读《MySQL技术内幕 InnoDB存储引擎》,对 Innodb逻辑存储结构有了些了解,顺便也记录一下; 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间...页在一些文档中有时也称为(block),InnoDB存储引擎的逻辑存储结构大致如图: ? 一、表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。...为了保证区中页的连续性,innodb存储引擎一次从磁盘申请4~5个区。默认的情况下,innodb存储引擎也的大小为16K,即一个区中一共有64个连续的页。.../wjqtest/t1.ibd 因为已经用完了32个碎片页,新的页会采用区的方式进行空间的申请,如果此时用户在使用py_innodb_page_info.py工具开查看表空间文件t1.ibd,应该可以看到很多类型为...若设置完成,则所有表中也的大小都是innodb_page_size,不可以对其再次进行修改;除非通过mysqldump导入导出的操作来产生新的库; Innodb存储引擎中,常见的页类型有: (1)数据页

    88820
    领券