【问题标题】:different table for insert and select用于插入和选择的不同表
【发布时间】:2011-06-25 16:07:41
【问题描述】:

为了提高插入性能和服务器负载,我决定将一个大表分成 2 个。一个只用于“选择”的大表和一个主要用于“插入”的小表”,有时也“选择”。每个时间段(我想一天)我都会将小表合并到大表中。

重新分级大表:有没有办法通过告诉 mysql 服务器它是只读的来提高性能?考虑到它仅用于选择,我可以假设它会在不到 1 秒的时间内处理 SELECT。什么时候会变成 ~1e9 行?

关于小桌子:我应该在这里做任何调整吗?开发从小表到大表(在 php 中)的自动合并过程的最佳方法是什么?

【问题讨论】:

    标签: php mysql sql database database-design


    【解决方案1】:

    我已经看到用于此目的的这种策略和类似策略,但它总是适得其反。您最终会通过获得更多开销来创建复杂性。例如,您要保证每条记录至少插入两次。

    请务必仔细进行基准测试并进行比较以确认您的假设,然后再过分。

    我发现规避对 MyISAM 表的删除非常有效。例如,您可以每天一次切换到新的小表,然后将旧表合并到大表中,一旦两者都是只读的;然后丢弃旧的。一旦删除开始出现在 MyISAM 表中,它的效率就会因必须查找和重用空洞而显着下降。

    Konerak 关于打包 ISAM 表的建议是对这一观点的一个很好的补充。一个效果是它为您提供了一个没有孔的表(和索引)。

    【讨论】:

    • “无孔”是什么意思?
    • MyISAM 表上的DELETE 操作不会物理地删除该行并移动所有后续行(或其他内容),而只是将该行标记为已删除。那一排现在是一个“洞”。下次您执行INSERT 时,MyISAM 将尝试为您的新行重新使用一个孔。寻找一个洞可能会很慢。
    • 同样重要的是,如果新记录的大小不同,则可以移动集群边界。
    【解决方案2】:

    我相信你不需要这个..

    如果您的目标是为SELECT 查询提供更多优先级,您可以使用INSERT DELAYED 进行插入。

    【讨论】:

      【解决方案3】:

      Packed ISAM tables 非常适合作为 MySQL 只读表,但对于繁重的查询,您仍然需要正确的索引。

      但请确保这是您问题的解决方案(并已考虑其他选项,包括索引和分区)

      【讨论】:

      • 当然我正在使用索引。实际上 SELECT 工作正常,大批量插入是非常慢的查询,会给服务器带来负载。我不完全理解分区的意义。是不是和索引很像?你能举个分区的例子吗?
      • 看看RANGE PARTITIONING。如果您的查询使用定义的范围,这确实与索引具有相同的效果,如果您将分区放在单独的硬盘上会提高效率
      【解决方案4】:

      我认为您不需要为 SELECT 和 INSERT 维护不同的表,主要是如果 INSERT 的数量不是很大或不是很频繁。如果表具有正确的索引,则 SELECT 将是有效的。但是请注意,过多的索引可能会杀死 INSERT。

      通过维护不同的表,我认为这对服务器负载没有任何好处,因为无论如何每条记录都会运行 2 个 INSERT。

      如果您认为 SELECT 具有更高的优先级,您可能还想查看 INSERT DELAYED,但我建议您在使用它们之前充分阅读它们。

      我还建议您使用 InnoDB,因为它使用行级锁定。

      你也可以尝试分区;我认为在您的情况下,它可能是水平分区。虽然我承认我自己没有使用它的经验。

      但是,如果拆分表是您认为效果最好的方法,我建议您探索其他替代方法。就像不是将数据从 INSERT 表迁移到 SELECT 表一样,您可以对 INSERT 和 SELECT 使用同一个表,但要维护多个表,例如每个月一个表或适合您的任何其他条件。然后,您可以构建逻辑来决定在哪个表上运行您的查询。您也可以最终合并旧表以创建一个大表并 DROP 旧表。

      【讨论】:

        猜你喜欢
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 2016-08-21
        • 2019-08-22
        • 2016-06-26
        • 1970-01-01
        相关资源
        最近更新 更多