26

我是一名 C++ 程序员,偶尔使用 MySQL 来处理数据库,但我的 SQL 知识相当有限。但是,我肯定愿意改变这一点。

目前,我正在尝试仅使用 SQL 查询对数据库中的数据进行分析(!)。但我即将放弃,转而将数据导入 C++ 并使用 C++ 代码进行分析。

我和我的同事讨论过这个问题,他们也推动我使用 C++,说 SQL 不是用于复杂分析,而是主要用于导入(从现有表)和导出(到新表)数据,还有一点例如将数据合并到 - 例如 - 连接表。

有人可以帮我画一条线吗?所以我知道什么时候切换到 C++?当然性能也是一个问题。

SQL 中的事情变得复杂的迹象是什么?或者,也许我只是在设计查询时采用了错误的方法。那么我在哪里可以找到教程、书籍……以采取更好的方法?

我希望这不是太模糊。我真的有点失落。

4

8 回答 8

26

SQL 擅长分析大型关系数据集

画线的地方是你分析的规模。

如果您一次分析一个记录,请在您的应用程序中进行。

如果您将大量记录作为一个单元进行分析,那么 SQL 绝对是该工作的最佳工具。

逐行分析并不是 SQL 的设计或优化目标。但是,如果您想了解有关一百万行数据的信息,请在数据库中进行。

于 2011-07-06T13:09:49.203 回答
7

我和我的同事讨论过这个问题,他们也推动我使用 C++,说 SQL 不是用于复杂分析,而是主要用于导入(从现有表)和导出(到新表)数据,还有一点例如将数据合并到 - 例如 - 连接表。

这完全是任意的。学习 SQL。网上有很多免费的资源。

于 2011-07-06T13:04:17.297 回答
5

只要您知道如何使用 SQL 提供的功能,您就可以在 SQL 中对数据进行非常复杂的分析。

SQL 具有执行关系操作的功能,例如连接和投影。也用于执行集合操作,如联合、交集和限制(子集)。也用于对数字进行基本算术运算,如四个算术运算符,以及 SQRT 等内置函数。还有统计函数,如 COUNT、SUM 和 AVG,可以以非常有趣的方式与预测相结合。一个好的 DBMS 可以让您使用自己用 C、C++ 或 PL/SQL 编写的函数来扩展内置函数。

您从这些功能中获得的力量取决于数据库的设计程度。一个设计良好的数据库符合关系模型,并且应该与您对数据的预期用途相关。

SQL 代码可以存储在存储过程中的数据库中。它可以存储在 SQL 脚本文件中。而且,如您所知,它可以嵌入到应用程序中。除了 SQL,您还可以使用 OLAP 工具和报告生成器非常轻松地对数据执行标准操作。

建议您将所有处理都保留在 C++ 中的人听起来好像他们已经学会了使用像一个又大又愚蠢的文件系统这样的数据库。一个好的 DBMS 远不止这些。

于 2011-07-06T15:48:44.950 回答
4

SQL 通常非常有效地处理自己的数据库(取决于服务器实现)。

您应该使用查询来分析数据库。
主要原因是通信开销。
即使服务器在本地机器上(远程服务器会有明显的通信开销),您仍然必须将存储的信息从 SQL 服务器检索到您的 c++ 程序进行分析。

现在,如果您在 SQL 中有 10000 行,您将不得不让 SQL 服务器读取它们并将它们发送到您的程序,在那里它可能会创建数据的本地副本供您处理。

如果您让 SQL 服务器处理查询,您将获得它根据您正在执行的查询类型所做的复杂优化,最后您只能检索有限数量的数据(您实际需要的数据)通过通讯。

于 2011-07-06T13:05:49.060 回答
2

在我看来,如果数据库服务器没有提供等效的分析功能,您应该只在 C++ 中执行分析,因为数据库服务器非常智能,很难甚至几乎不可能超过数据库服务器分析功能的算法效率。将原始数据带入应用程序进行分析还包括大量开销。

如果在某些时候普通 SQL 变得过于复杂,服务器的本机 PL 可能是一个不错的选择

于 2011-07-06T13:12:55.167 回答
2

您做出了正确的决定,开始使用 SQL 进行数据分析。现在,当您觉得自己的 SQL 知识限制了您时,您有 2 个选择:放弃并切换回熟悉但效率不高的工具集 (C++) 或提高您的 SQL 水平。

在某些时候,SQL 也可能变得过于复杂,但是 C++ 也不会成为答案——很可能是一些专门的工具。

于 2011-07-06T13:09:46.907 回答
0

我同意 JNK 和 Jochai,但不同意 Ascanio。最好提高数据库系统方面的知识。Sql自带

于 2011-07-06T13:28:02.663 回答
0

因此,这是我一直在考虑的事情,在我看来,SQL 作为一种用于存储/操作数据的平台/语言,与 C++ 或 C 库相比应该没有固有的优势。在我看来,理论上你可以构建一个 C++ 库,即使不是更有效,也可以比 SQL 更有效。这样做,您将能够从头开始构建它,就整数、字符、字符串和其他数据类型的存储方式而言,并使其更容易与您的特定应用程序交互(如 Web 开发)。你甚至可以让查询可以用像 javascript 这样的语言来完成(让 web 开发人员专注于学习一种语言)。

于 2016-02-15T15:15:10.003 回答