提高递归 SQL 请求的性能
我有这样的类别,这个类别有无限的子类别。 在数据库表中,字段是ID、UpperID 和Title。
如果我在程序(ASP.NET项目)中使用递归方法调用DataTable中的类别及其子类别 性能很差。 许多用户会使用这个应用程序,所以一切都会变坏。 也许所有类别都填充到缓存对象,然后我们不必转到数据库。 但类别数为 15000 或 20000。 所以我认为这不是一个好方法。
我可以做什么来获得快速性能? 你给我什么建议吗?
I have so category and this categories have unlimited sub category.
In Database Table, Fields are ID, UpperID and Title.
If I call a category and its subcategory in DataTable with recursive method in program(ASP.NET project)
performance is very bad.
And many user will use this application so everything goes bad.
Maybe All categories Fill to A Cache object and then we musnt go to Database.
But category count is 15000 or 20000.
So I think isn't a good method.
What can I do for fast performance?
Are you give me any suggestion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
缓存或其他内存持久性比在关系系统上执行此操作要好得多:) ... 嘿... 哎呀!
只是我的2分钱!
例如。
瞧……你的树已经准备好了!
编辑:
您确切地知道您的性能瓶颈在哪里吗?...
给您一些想法,例如:
:
那么您应该加载一次并确保进行一些更改跟踪/通知以获取更改(如果进行了)或优化您的查询!
建立结构:
我创建树(遍历部分)的方式是使用
Dictionary
查询结构所能做的最浪费的事情:
我在示例中使用的结构比
List
更快。Dictionary
在键上使用索引 - 因此您可以使用int
作为键(ID)编辑:
你现在有什么?你从哪里开始?你能确定你的泥坑在哪里吗?给我们代码!
caching
or other in-memory-persistance is by far better than doing this on a relational system :) ... hey... it's oop!just my 2 cents!
eg.
et voila ... your tree is ready to go!
edit:
do you exactly know where your performance bottle-neck is?...
to give you some ideas, eg:
loading from database:
then you should load it once and be sure to have some changetracking/notifying to get changes (if made) or optimize your query!
building up the structure:
the way i create the tree (traversal part) is the wastest you can do with a
Dictionary<TKey, TValue>
querying the structure:
the structure i've used in my example is faster than
List<T>
.Dictionary<TKey, TValue>
uses an index over the keys - so you may useint
for the keys (IDs)edit:
what do you have right now? where are you starting from? can you determine where your mudhole is? give us code!
谢谢大家,
我找到了通用表表达式(CTE)五十的解决方案。
它允许快速递归查询。
Thanks All,
I find my solution with Common Table Expressions(CTE) fifty- fifty.
Its allow fast recursive queries.