gpt4 book ai didi

c# - SQL/C#-多阶段查询,海量数据集

转载 作者:行者123 更新时间:2023-11-29 21:01:43 25 4
gpt4 key购买 nike

我在本地存储的MySQL数据库上使用了巨大的数据集(> 10M条记录*〜16k)。

用户将按字段A / B / C进行过滤,并返回1-200k条记录。此查询最多需要一分钟

有了这组数据,我想用SQL做进一步的分析。即根据UI中的设置动态更改另一组字段,例如D / E / F,仅在较小的数据集上运行这些进一步的查询。

我的问题是-从概念上讲-在C#/ MySQL中如何最好地解决此问题?


  我可以在MySQL服务器上保持原始查询“打开”,并动态调整它以适合吗?
  我是否需要将原始查询的整个数据集放入内存,然后在C#中进一步过滤?
  我应该将相关数据复制到临时表中并在该表上执行查询吗?

最佳答案

我可以在MySQL服务器上动态地保持原始查询为“打开”吗?
  调整以适合?


关于SQL的入门教程(适用于任何存在的SQL Server变体)将向您显示,这不是SQL的工作原理,而是自发明以来就一直如此。已执行查询-要获得不同的结果,请再次询问。


  我是否需要将原始查询的整个数据集带入内存,并且
  然后在C#中进一步过滤?


不。我要说,在99%的情况下,全部加载然后进行过滤是愚蠢的。是的,我的意思是。建立数据库进行过滤。在大多数情况下,这意味着您不仅要在客户端上使用更多的内存,还必须通过慢速的网络连接来拉数据(是的,与本地内存相比,即使10 GB的速度也很慢),然后才将数据丢弃。这是没有意义的,除了有限的数据集外,还有很多本地过滤,最好是动态过滤(作为用户类型)。诸如“所有国家/地区的清单”之类的限制-足以让我不必担心网络速度等。当您变大时,抛弃价格会变得过高。


  我应该将相关数据复制到临时表中,并在
  那张桌子?


您为什么甚至认为完全复制+筛选比没有先将整个数据写入另一个表的筛选要快?最重要的是,您遇到了与以前相同的问题-您不得不进行大量工作才能将其丢弃。最重要的是,除非您运行快速SSD的Raid 0,否则您会在临时表中遇到非常慢的介质。

认真地读一本初学者的书。 3个假设,一旦您了解一些基础知识,所有这些假设都有明显的原因是错误的。

关于c# - SQL/C#-多阶段查询,海量数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com