【发布时间】:2019-04-06 19:28:30
【问题描述】:
我有一个网站,用户可以在其中保持对话。每条评论都存储在 MySQL 数据库中。 DB 有一个名为 comment 的表,其中包含一个指向对话的外键。 对话消息逐步返回给客户端,使用 "limit" 子句 限制行(这对我的问题很重要)。例如,
SELECT * FROM `messages` WHERE `user_to_id` = 1 and `conversation_id` = 4 limit 10,5
我的问题是下一个:如果 cmets 表中的记录太多,像上面这样的选择查询会更慢吗?
如果是,一个好的做法是将旧记录存储在单独的表或服务器文件中,以便仅使用最近的 cmets 加速选择查询?
【问题讨论】:
-
如果您正确索引数据库,并以较小的批次加载数据(即您不会一次加载最后 10.000 个 cmets),应该没问题。 SQL 专为处理庞大的数据集而设计。
-
就像@Qirel 所说的,如今的 SQL 服务器旨在处理数百万或数十亿的记录,在索引时就可以了。这意味着它很可能可以很好地处理几 GB 或 TB 大小的表大小。为了更好地扩展,您可以使用分区来进一步改进。
-
谢谢你们。所以,不需要单独存放
-
“所以,没有必要单独存储” @Angel 分区会在 MySQL 中自动完成,它会生成更小的表文件..
-
索引胜过数据。这意味着即使是普通计算机也可以处理数百万或记录如果优化器使用了正确的索引。
标签: php mysql query-optimization