我正在寻找最有效的遍历树形层次结构的方法..
我有/将有一张桌子并预计数百万条记录,树不会改变..
目前我正在存储一个像这样的树串
/ 20/1/1/1/1/1的
其中20是种子ID ..
如何高效爬行?我目前有这个
select * from reg where tree in ('/20/1/1/1/1','/20/1/1/1','/20/1/1','/20/1','20')
是否有一个sql命令,不要求我拆分并循环它?
我正在使用sql server并且知道CTE命令,但是当有数百万条记录时效果不佳..:/
感谢
答案 0 :(得分:1)
反转您的比较!
SELECT * FROM reg WHERE tree='/20/1/1/1/1' OR '/20/1/1/1/1' LIKE CONCAT(tree, "/%");
祝你好运
mysql> create table temp_reg (tree varchar(255));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into temp_reg values ('/20/1/1/1/1'),('/30/1/1/1'),('/20/1');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from temp_reg where '/20/1/1/1/1' LIKE CONCAT(tree, "%");
+-------------+
| tree |
+-------------+
| /20/1/1/1/1 |
| /20/1 |
+-------------+
2 rows in set (0.00 sec)