前情
在以往,我们查询某个区域下方的数据时,需要获得所有区域Id,然后带入SQL中使用IN关键字来实现对该节点级节点一下的数据的查询。
如何修改使得不要嵌套这么多的Id也能实现该操作。
处理
- 可以考虑再区域数据与关联到区域数据的表中添加一个字符串字段(此处取名AraeCode)。
- AraeCode的值是唯一值。
- 咱们在生成新区域时,可以套用父节点的AreaCode并在末尾最佳唯一字符串,拼接成新字符串。
- 然后咱们给AreaCode在数据库中建立索引。
- 由于咱们每次都在末尾追加字符串,使得查询能够走索引。
- 索引失效的一个场景就是:like ‘%f1’。
- 从而提升效率
举例
[
{"Id":1,"Name":"四川","PId":0,"AreaCode":"f1"},
{"Id":2,"Name":"成都","PId":1,"AreaCode":"f1gD"},
{"Id":3,"Name":"自贡","PId":1,"AreaCode":"f13c"},
{"Id":4,"Name":"绵阳","PId":1,"AreaCode":"f1ac"},
{"Id":5,"Name":"成都区-0","PId":2,"AreaCode":"f1gDzc"}
]
当我们想查询四川下面的数据时
SELECT * FROM Device WHERE AreaCode like 'f1%'
当我们想查询成都下面的数据时
SELECT * FROM Device WHERE AreaCode like 'f1gD%'
以此类推通过like来优化查询
弊端
如果区域表的数据节点经常改变的话,那需要额外维护其他表和区域表的AreaCode。