MySQL对于具有数百万行或管理多个表的速度表来说更好?

时间:2012-12-07 15:07:28

标签: mysql sql database performance

我正在使用现有的PHP / MySql / JS / Ajax Web应用程序来处理用户的大量表行。这是页面当前的工作方式。

  1. 用户上传LARGE csv文件。我正在使用的测试有400,000行(每行有5列)。
  2. Php为此数据创建一个全新的表,并插入数十万行。
  3. 页面然后以有用的方式将此数据排序/处理/显示回用户。处理包括搜索,按日期排序和其他行,并在没有大量加载时间的情况下重新显示它们(这就是JS / Ajax的用武之地)。
  4. 我的问题是这个应用程序是应该将数据放入每个上传的新表中,还是放入一个每个文件都带有id的大表中?我认为原始开发人员正在为速度目的添加单独的表。速度对此非常重要。

    有更快的方法吗?是否有更好的鼠标陷阱?有没有人对此有所了解?

    请记住,每个.csv都可以包含数十万行,每天可以上传数百个.csv文件。虽然它们可以在最后一次使用后大约24小时被删除(我认为cron工作有任何意见吗?)

    谢谢大家!

    基于评论的一些注释:

    • 所有数据对每个用户都是唯一的,并且会发生变化,因此用户不会在几个小时后重新访问此数据。只有当他们不小心关闭窗户然后再回来时,他们才真正重新访问.csv。
    • 没有外键需要所有csv对每个用户都是私有的,不需要交叉引用。

2 个答案:

答案 0 :(得分:2)

每天有10个 5 行和10个 2 CSV,你每天看1000万行(你说你会定期清除这些数据) )。对于一个体面的数据库来说,这看起来并不像一个可怕的数字(特别是考虑到你可以在表中进行索引,而不是跨多个表)。

显然,最经常使用的CSV可以非常容易地保存在内存中以提高访问速度 - 甚至可能是所有这些(基于没有数据的非常简单的计算,如果你每24小时冲洗一次就会给我一个1Gb的数字这些天1Gb不是一个不合理的记忆量)

答案 1 :(得分:2)

由于您无法更改数据结构的简单原因,我会回避将所有数据放入单个表中。

由于数据正在被删除,并且您不需要组合来自不同负载的数据,因此没有明显的理由将数据放入单个表中。另一个论点是应用程序现在可以工作。你是否真的希望在完成工作之后发现一些暗示单独的表的要求?

如果确定单个表,则使用表分区。由于每个用户都在使用自己的数据,因此您可以使用分区将每个用户负载分成单独的分区。虽然分区有限制(例如没有外键),但这样可以像访问原始数据一样快速访问单个表中的数据。