【问题标题】:How can I speed up an SQL table that recquires fast insert and select?如何加快需要快速插入和选择的 SQL 表?
【发布时间】:2018-02-16 17:35:24
【问题描述】:

我正在做一些网络爬虫并将结果插入数据库。刮大约需要 2 秒,但插入时间要长得多。有两张表,表一是url和Ids的列表,表二是tagIds和siteIds的集合。

当我向 siteIds 添加索引时(这是 URL 的 md5 哈希值,我这样做是因为它可以加快插入速度,因为它不必为每个 urls id 查询数据库来添加站点标签配对)插入速度在 300,000 左右页后急剧下降。

示例
表一

hash                       |url             |title   |description
sjkjsajwoi20doi2jdo2xq2klm www.somesite.com  somesite a site with info

表2

site                      |tag
sjkjsajwoi20doi2jdo2xq2klm xn\zmcbmmndkd2

当我取消索引时,它的速度要快得多,我能够在 12 小时内添加大约 2500 万条记录,但是搜索未索引的标签是不可能的。

我为此使用 php 和 mysqli,我愿意接受有关组织这些数据的更好方法的建议。

【问题讨论】:

  • 正确的索引表会比不正确使用索引的选择更快。

标签: php sql database mysqli indexing


【解决方案1】:

嗯,这有点棘手,因为速度变慢是由于数据库在插入每条记录时需要更新索引数据结构的开销。

你是如何访问这个的?将 PDO 用于 php?使用原始 sql?准备好的陈述?

我还会确保您是否需要事务,因为数据库可能会隐式使用事务,这可能会减慢插入速度。对于原子记录(未删除但收集的记录,或者没有标准化外键相关记录的记录),您不需要这个。

您还可以考虑测试 STORED PROCEDURE 是否具有更好的效率(如果数据库有存储过程,它可能会优化)。然后只需通过 PDO 调用此存储过程。也可能是 db 的 server / install 有硬件限制,要么存储(不在 ssd 上)要么 db 操作 / install 无法访问 cpu 的全部功能(os 中的低优先级,其他大型处理db 等待 cpu 周期等)。

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 2018-07-12
    • 2015-02-07
    • 1970-01-01
    • 2013-04-03
    • 2019-07-24
    • 2020-01-30
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多