Mysql 将一个表的记录分布到具有相似表结构的多个表中是一个好主意吗

Mysql 将一个表的记录分布到具有相似表结构的多个表中是一个好主意吗,mysql,mariadb,Mysql,Mariadb,我有一张有6200万条记录的桌子 Table structure: 52 columns Storage engine: InnoDB Collation: utf8_general_ci SELECT - Maximum number of operations performed INSERT - Always in bulk but it doesn't happen always. UPDATE - Very less number of operations but some

我有一张有6200万条记录的桌子

Table structure: 52 columns
Storage engine: InnoDB
Collation: utf8_general_ci



SELECT - Maximum number of operations performed

INSERT - Always in bulk but it doesn't happen always.

UPDATE - Very less number of operations but sometime much and sometime not at all
因为我们几乎总是实时获取。将这个大表中的记录以某种逻辑分布到多个类似的表中,以便更快地选择记录,这是一个好主意吗


MYSQL版本:MYSQL版本15.1发行版10.2.33-MariaDB

这种技术几乎可以保证速度会变慢

提供
CREATE TABLE
和重要查询

通常,
SELECT
可以通过复合索引和/或重新编制来加速

6200万行高于平均水平,但规模并不可怕

“插入-始终批量”-让我们看看您的技术;也许有办法进一步加快速度

“归档”旧数据——实际删除数据可能会有所帮助。保留它,但使用合适的索引通常是好的。我们需要查看您的查询和模式

“分片”是将部分数据放在不同的服务器中。当您耗尽了一台机器的写入容量时,这非常方便

“复制”(主+副本)允许将读取转移到另一台服务器,从而分散负载。通过这种技术,您的系统可以处理几乎无限数量的
选择

“是的,索引已经实现”——这可能意味着每列有一个索引。这几乎总是不理想的

“128GB RAM”--如果整个数据集比这个数据集小得多,那么大部分RAM都没有使用

“查询设计”--我有一个CPU被固定在100%的例子。进行以下更改后,CPU下降到1%:

SELECT ... WHERE DATE(dt) = CURDATE();
-->


定义“快得多”。比什么快?您的数据库现在出了什么问题?目前我们的web应用程序有时非常慢。对于一个普通的webhook(通过外部API)来说,响应时间需要30秒,而响应时间应该不到1秒。除非您计划将这些较小的表放在不同的服务器上,或者可以拆分查询以忽略某些表(例如,通常不会被引用的较旧数据),否则我不明白为什么多个表可以产生更快的查询。定义“某个时间”. 定义“非常慢”。定义“普通webhook”-它做什么,运行什么查询,哪个具体部分比较慢?你有没有想过把问题缩小到某个问题上?对于这个甚至没有定义的问题,您如何寻找解决方案?此外,查询的速度受很多因素的影响。在尝试提出此类优化技术之前,您是否看过索引和查询设计?
SELECT ... WHERE dt >= CURDATE();