【问题标题】:reading from MySQL is faster or reading from a file is faster?从 MySQL 读取更快还是从文件读取更快?
【发布时间】:2023-03-16 14:15:02
【问题描述】:

你好

我有一个疑问,我发现在大表的情况下读取 mysql 数据会更慢...我已经做了很多优化但无法通过..

我的想法是,如果我将数据存储在一个文件中,它会提供更好的速度吗??

当然,每个数据都是一个单独的文件。所以数百万数据=数百万文件。我同意它会消耗磁盘空间......但是读取过程呢?它更快吗?

我正在使用 PHP 读取文件...

【问题讨论】:

  • 关系数据库提供的不仅仅是速度。如果您想放弃所有这些以获得潜在的小加速 - 如果您在阅读时突然想添加过滤器怎么办你的数据?
  • MySQL vs File Databases 的可能重复项
  • @Soufiane:这个问题是关于易于存储,而不是速度。

标签: php mysql file


【解决方案1】:

读取一个文件 = 快。

读取很多/大文件 = 慢。

从数据库中读取单个小条目 = 浪费 I/O。

在数据库中组合许多条目 = 比文件访问更快。

【讨论】:

    【解决方案2】:

    只要您的表被正确索引并且只要您使用这些索引(没错),使用关系数据库(如 mysql)将会更快,更健壮,灵活(在此处插入许多流行语)等。

    要检查您的查询性能为何不符合您的预期,您可以在您的选择中使用 explain 子句 (http://dev.mysql.com/doc/refman/5.1/en/explain.html)。

    【讨论】:

    • 除非数据库服务器功率不足或过载。
    • @Ignacio Vazquez-Abrams: ..or 关闭 :P 但是是的,我明白你的意思
    【解决方案3】:

    要回答这个话题,是的。

    我的意思是有这么多(未提及的)因素,以至于不可能明确地说明每次都会比另一个更快。

    【讨论】:

      【解决方案4】:

      这取决于您存储的数据类型。 结构化数据通常使用 SQL 读取速度更快、更灵活/更强大,因为这正是它的用途。如果要按某个属性进行搜索、过滤、排序或分组,DBS的索引结构和优化是合适的。

      但是,当使用数据库存储大文件 (BLOB) 时,这些文件包含非结构化数据,也就是说您不会按文件的任何部分搜索、过滤、排序或分组,然后这些文件只会炸毁数据库大小并使其变慢。微软对此主题进行了一项有趣的研究(只需找到链接)。这项研究是微软在他们的 SQLServer 中引入 External BLOB storage 的原因,这基本上意味着您所问的:BLOB 保存在数据库外部的文件中,因为他们测量到这种方式访问​​速度要快得多.

      在存储文件(例如图片、视频、文档...)时,您通常会在文件中包含一些元数据,您希望这些元数据能够与 SQL 等结构化查询语言一起使用,而实际文件不一定需要保存在数据库中。

      【讨论】:

      • 我只能想到将二进制数据存储在数据库中的一个优点,它更安全。但是,如果您将文件存储在公共 HTTP 文件夹之外(不能直接访问),这不会成为问题。
      • @DoctorLai - 数据库也是文件。
      【解决方案5】:

      在大多数情况下,从 dbms(MySQL 就是其中之一)读取速度更快,因为它们内置了缓存,可以将数据保存在内存中,因此下次您尝试读取相同的数据时,您不必等待令人难以置信的慢速硬盘。

      dbms 本质上是从您的硬盘驱动器 + 缓存中读取数据以加快速度(+ 一些数据排序算法)。请记住,您的数据库存储在您的硬盘上:)

      【讨论】:

        【解决方案6】:

        这取决于很多因素,尤其是您使用的文件系统类型。无论如何,MySQL 使用文件进行存储,因此读取速度不是问题——最大的因素是 MySQL 可以多快找到您的数据,与在您的文件系统中查找数据的速度相比。

        不过,一般来说,MySQL 非常擅长快速查找数据——毕竟,这就是它的生活目标。因此,除非您有充分的理由说明 FS 应该更快,否则请坚持使用数据库并检查您的索引等。

        【讨论】:

          【解决方案7】:

          通过选择自定义文件存储系统,您将失去使用关系数据库的好处。此外,您的代码可能不容易维护。

          尽管如此,仍有许多人认为关系数据库以牺牲速度为代价提供了过多的复杂性。查看维基百科中的 NoSQL 条目并了解可能的替代方案。

          【讨论】:

            猜你喜欢
            • 2014-12-15
            • 2017-03-26
            • 2017-02-15
            • 1970-01-01
            • 1970-01-01
            • 2017-11-21
            • 1970-01-01
            • 2015-08-07
            • 2014-12-28
            相关资源
            最近更新 更多