数据检索 - 数据库VS编程语言

时间:2012-04-05 15:56:18

标签: programming-languages rdbms

我最近一直在使用数据库,在此之前我正在开发不使用数据库的独立组件。 通过所有数据库工作,我遇到了一些问题。 为什么数据库查询比从文件中检索编程语言数据更快。

进一步阐述我的问题 -

假设我有一个名为Employee的表,其中包含名称,ID,DOB,电子邮件和性别字段。为简单起见,我们还假设它们都是固定长度的字符串,并且它们没有任何索引或主键或任何其他约束。

想象一下,我们表中有100万行数据。在一天结束时,该表将存储在磁盘上的某个位置。当我写一个查询选择姓名,来自员工的ID,其中DOB =“12/12/1985”,DBMS从文件中获取数据,处理它,过滤它并给我一个结果,这是100万的子集数据行。

现在,假设我在平面文件中存储相同的100万行,为简单起见,每个字段类似地是固定长度字符串。数据在磁盘上的文件中可用。 当我用C ++或C或C#或Java编写程序并执行相同的任务,找到DOB =“12/12/1985”的名称和ID时,我将按记录读取文件记录并检查每行数据如果DOB =“12/12/1985”,如果匹配则我将该行存储给用户。

与SQL查询返回结果的速度相比,程序执行此方法的速度太慢。

我认为DBMS也是用某种编程语言编写的,并且还有一个解析查询的额外开销,而不是。

那么在DBMS中发生什么使得检索数据比通过编程语言更快?

如果这个问题在这个论坛上不合适,请删除,但请给我一些指示,以便我找到答案。

如果有任何帮助,我会使用SQL Server。

3 个答案:

答案 0 :(得分:7)

  

为什么数据库查询比从文件

中检索编程语言数据更快

这取决于很多方面 - 网络延迟和磁盘搜索速度是其中两个重要因素。有时从文件中读取更快

在一百万行内找到行的描述中,数据库通常比在文件中搜索更快,因为它在数据上使用索引

如果您预处理数据文件并为不同的字段提供索引文件,您也可以加快文件系统的数据查找速度。

注意:数据库通常不用于此功能,但因为它们符合ACID,因此适合在有多个进程的环境中工作(通常许多计算机上有许多客户端),此时查询数据库。

答案 1 :(得分:0)

有很多技术可以加速各种访问。正如@Oded所说,索引是您特定示例的最佳解决方案:如果数据库已设置为按日期维护索引,则可以直接转到该日期的条目,而不是读取整个文件。 (请注意,维护索引会占用空间和时间,但它不是免费的!)

另一方面,如果此类索引已设置 ,且数据库尚未按日期顺序存储,则按日期查询将需要遍历整个数据库,就像你的平面文件程序一样。

当然,您可以编写自己的程序来维护和使用文件的日期索引,这将像数据库一样加速日期查询。并且,您可能会发现您想要添加其他索引,以加快其他类型的查询 - 或者删除最终使用的资源超出其价值的索引。

最终,管理您添加到文件管理器的所有功能可能会成为一项复杂的任务;您可能希望将此类配置存储在自己的文件中,而不是将其硬编码到程序中。至少,您需要一些功能来确保更改配置不会损坏您的文件...

换句话说,您将编写自己的数据库。

答案 2 :(得分:0)

......一个旧的,我知道......只是因为如果有人发现这个问题:包含的问题"假设...没有任何索引"

...所以问题是关于数据库和没有索引的平面文件之间的顺序数据集斗争,数据库赢了......

答案是:如果你从磁盘上读取记录的记录,你会进行大量的磁盘搜索,这在性能上是昂贵的。数据库总是按概念加载页面 - 所以一次记录几个记录。减少磁盘搜索肯定更快。如果你要从平面文件中进行mem缓冲读取,你可以获得相同或更好的读取值。