【问题标题】:Avoid frequent database connections避免频繁的数据库连接
【发布时间】:2012-11-13 18:32:42
【问题描述】:

我试图读取一个有 10000 行的 excel 文件。读取每个单元格后,我的应用程序应该检查读取的值是否存在于数据库中。这工作得很好,但问题是由于频繁的数据库检查,应用程序似乎很慢。任何人都可以提出更好的替代方案吗?我正在使用带有 mysql 的 codeigniter 框架。

感谢和问候,

提斯蒙

【问题讨论】:

  • 请向我们展示您的代码! =)
  • 你有没有试过看看问题出在哪里?通过插入 echo 语句来显示正在运行的代码位,或者使用分析器,您可以找出慢的部分。在您的情况下,它可能是数据库查询、从 Excel 读取、数据库连接......
  • 没有看到任何代码,我无法确定我的建议。但是,我要做的是查询数据库,将所有结果粘贴到数组中,然后对照数组检查值。但我可能误解了你的问题。

标签: php database codeigniter optimization


【解决方案1】:

读取 10000 行不应该占用大量资源,我认为真正减慢您的应用程序速度的是每次读取的每个单元格都检查整个数据库。所以你应该避免这种情况。

我首先想到的是: 将更新的(日期/时间)字段添加到您的每一行中,并且仅在更新的日期/时间比您上次检查时更新时才检查整行。

无论如何,显示更多细节会让我们更好地帮助您。

谈谈您的应用程序需要准确检查什么或您的 excel 文件包含什么

【讨论】:

  • OP 不需要知道是否必须更新行。他需要知道它是否存在,所以新列没有任何意义。
  • 那么更新的字段或单元格基本上是要知道该行是否没有被检查,或者如果已经检查它已经改变,所以应用程序需要再次检查它,不知道是否它必须更新。因为我不知道 100% 的情况但我猜他的问题是他可能更新了 excel 文件,可能是 10 行,但是再次检查整个文件(每个单元格)并进行数据库查询
  • 对不起仍然没有意义。如果您可以评估您的新列,那么您已经对其进行了查询。那应该如何减少查询?
  • 您是根据变量而不是数据库来评估它,这样就不会延迟应用程序,也许是 0.0001 秒?针对数据库,如果它是远程的,您将总结延迟加上查询时间。即使他必须根据数据库进行评估,也将是 1 个字段,而他在该行中可能有 20 个字段,所以只需做一些数学运算,这将节省大量时间。
  • 哪个变量?无论如何,您必须根据数据库(或从哪里获取数据)对其进行评估。您仍然需要考虑所有 20 (21) 个字段,因为您想识别一个特定的行...我出去了,这导致我们无处可去。
【解决方案2】:

您可以对从 Excel 文件中读取的数据进行分组。

假设您的 Excel 文件中有一个“邮政编码”列。然后制作一组邮政编码,这可能会产生一个包含 10 个唯一邮政编码的列表。然后,您只需针对每个邮政编码对数据库进行 10 次查询,并将返回的列表与 Excel 文件中的分组数据进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2019-10-29
    • 1970-01-01
    • 2020-07-11
    • 2016-05-11
    • 2012-12-14
    相关资源
    最近更新 更多