mysql链表查询语法_mysql查询链表

本文探讨了如何通过RDBMS查询优化,在t_list表中使用迭代和递归查询性能瓶颈。作者建议利用索引列避免频繁全表扫描,提出使用`index_column`进行快速排序和增删操作。针对动态列表更新,提供了SQL示例并讨论了索引在大规模数据中的效率提升。
摘要由CSDN通过智能技术生成

查询通过迭代t_list表(最后一行)来工作.对于此表中的每一行,SELECT子句中的子查询重新查询表,搜索当前行的子项(WHERE parent = _parent – 但_parent是@r的别名).在每次迭代时,子节点的id被分配给@r变量.

要添加边界,这种变化应该可以解决问题:

SELECT * FROM (

SELECT

@r AS _parent,

@r := (

SELECT id

FROM t_list

WHERE

( @c = 0 AND _parent IS NULL AND parent IS NULL ) -- special case if the first item is the root

OR (parent = _parent)

) AS id,

@c := @c + 1 AS rank

FROM (

SELECT @c := 0, @r := parent FROM t_list WHERE id = @start

) AS ini,

(

SELECT id FROM t_list LIMIT @limit

) AS lim

) AS tmp WHERE id IS NOT NULL;

将@start和@limit替换为第一个项的id和要检索的最大项数.请test it here.

使用RDBMS对这样的数据结构建模可能完全是一个坏主意.为什么不使用“索引”列?获取列表然后变为即时:

SELECT * FROM list ORDER BY index_column ASC;

也许你的列表是经常更改的,但是这样的查询应该相当快,除非列表变得非常大:

-- insert an element at position X

UPDATE list SET index_column = index_column +1 WHERE index_column > X ORDER BY index_column DESC;

INSERT INTO list VALUE (some_value, X);

-- delete an element at position X

DELETE FROM list WHERE index_column = X;

UPDATE list SET index_column = index_column -1 WHERE index_column > X ORDER BY index_column ASC;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值