【问题标题】:Insert into MYSQl too slow插入 MYSQl 太慢
【发布时间】:2016-04-24 18:21:20
【问题描述】:

搜索参数中的用户键,然后我们向数据提供者发出请求并将用户重定向到加载页面。来自数据提供者的响应命中回调 url,在这种情况下,我们解析结果并将大约 200 行存储到数据库中。同时加载页面使用ajax每秒查询数据库,当结果全部存在时,我们将结果显示给用户。

问题是插入 mysql 数据库太慢了。我们知道数据提供者的响应会在几秒钟内返回,但是脚本的处理和将行插入数据库的速度非常慢。我们确实使用多行插入。

有什么改进的建议吗?仅供参考,代码非常长……这就是为什么现在不显示的原因。

【问题讨论】:

  • 有多慢??插入 200 行,它也不会那么快。
  • 扩展、数据库引擎、索引?插入前有预处理吗?连接/断开每个插入?机器功率够吗?我猜还有很多其他的事情要考虑。
  • @Plum 大约需要 15-25 秒。在开发过程中,它的速度要快得多,大约 2-3 秒。
  • @frz3993 请求和响应是一个 XML 文件。点击 php 回调脚本。插入前有预处理。由于它是多行插入,我们只对 mysql 数据库进行一次。
  • 你检查脚本执行时间确定是插入导致的吗?并且您可以启用慢查询日志并检查是否有任何查询太慢。

标签: php mysql ajax search insert


【解决方案1】:

影响您的插入的因素有很多:

1) 缓慢的硬件和糟糕的服务器速度。 Sol : 请联系您的服务器管理员

2) 使用 InnoDB 以外的东西

3) 使用代理键,而不是您的主键,它与您的自然主键一起是数字和顺序的。

4) 试试这个https://stackoverflow.com/a/2223062/3391466

【讨论】:

  • “InnoDB 以外的东西”——还有什么比 InnoDB 更好?
【解决方案2】:

建议:与其在一个页面上运行代码并让用户等待整个过程,为什么不让php页面将指令存储在一个php队列中?然后,这些指令将由单独的 php 脚本(例如 Cron 作业)执行,用户不必等待整个过程发生。

但是,在这种情况下,最好让用户知道所做的更改可能需要一些时间才能更新。

Cron 作业很容易实现。在 CPanel 中有一个用于 Cron Jobs 的选项,您可以在其中指定要运行的脚本以及运行时间间隔。您可以让您的脚本知道每 1 分钟运行一次(或多或少取决于有多少需求)。从那里您的脚本将检查队列并继续运行,直到队列再次为空。

如果有帮助,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多