我什么时候应该使用C ++而不是SQL?

时间:2011-07-06 12:57:49

标签: c++ mysql sql data-analysis

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

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

我和同事讨论过这个问题,他们也推动我使用C ++,说SQL不是用于复杂分析,而是主要用于导入(从现有表)和导出(到新表)数据,以及稍微多一些,例如合并数据 - 例如 - 加入表格。

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

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

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

8 个答案:

答案 0 :(得分:24)

SQL擅长分析大量关系数据

绘制线的位置是分析的比例。

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

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

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

答案 1 :(得分:7)

  

我和同事讨论过这个问题,他们也推动我使用C ++,说SQL不是用于复杂分析,而是主要用于导入(从现有表中)和导出(到新表)数据,以及稍微多一些,例如合并数据 - 例如 - 加入表格。

这完全是武断的。学习SQL。网上有很多资源可供免费使用。

答案 2 :(得分:5)

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

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

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

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

建议您保持C ++所有处理的人听起来像他们已经学会了足够使用像大而愚蠢的文件系统这样的数据库。一个好的DBMS远不止于此。

答案 3 :(得分:4)

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

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

现在,如果SQL中有10000行,则必须让SQL服务器全部读取它们并将它们发送到您的程序,在那里它可能会为您创建数据的本地副本。

如果您让SQL服务器使用查询执行此操作,您将根据您正在执行的查询类型获得复杂的优化,最后您只能检索有限数量的数据(实际需要)通过沟通。

答案 4 :(得分:2)

您决定使用SQL开始数据分析。现在,当您认为您对SQL的了解限制了您时,您有两个选择:放弃并切换回熟悉但不是非常高效的工具集(C ++)或者将您的级别提升到SQL。

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

答案 5 :(得分:2)

在我看来,如果数据库服务器没有提供相应的分析功能,你应该只用C ++进行分析,因为数据库服务器非常智能,并且很难打破数据库服务器分析功能的算法效率。将原始数据带到应用程序以进行分析也会产生大量开销。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

所以,这是我一直在思考的问题,在我看来,SQL作为存储/操作数据的平台/语言,应该没有C ++或C库的固有优势。在我看来,从理论上讲,你可以构建一个C ++库,就像在执行此操作时一样,效率高,而不是SQL。在这样做的过程中,您可以根据内部,字符,字符串和其他数据类型的存储方式从头开始构建它,并使您更容易与特定应用程序(如Web开发)进行交互。你甚至可以做到这一点,以便查询可以用javascript这样的语言完成(允许Web开发人员专注于只学习一种语言)。