下面的查询需要大约一分钟才能在我的 MySQL 实例上运行(运行在一台相当强大的机器上,该机器具有 64G 内存、2T 磁盘、2.30Ghz CPU,具有 8 个内核和 16 个逻辑,并且查询在 localhost 上运行)。同样的查询在我有权访问的 SQL Server 数据库上运行不到一秒。不幸的是,我无法访问 SQL Server 主机或 DBA 等。
select min(visit_start_date)
from visit_occurrence;
该表已设置为ENGINE=MyISAM
和default-storage-engine=INNODB
并innodb_buffer_pool_size=16G
设置在 中my.ini
。
是否有一些我可能缺少的配置会导致此查询在 MySQL 上运行如此缓慢?我该如何解决?
我有大量需要支持的表和查询,所以我真的希望能够在全球范围内解决这个问题,而不是在我有慢查询的地方创建索引。
SQL Server 数据库似乎没有关于正在查询的列的索引,如下所示。
编辑:
未标记的 MS Sql Server,我已标记它希望我们的 MS Sql Server 同事的帮助与信息,Sql Server 有一些结构化数据和/或查询的方式,这将使这种类型的查询在该平台上运行得更快,例如mysql
删除了代码图像以更符合社区标准
如果你不问,你永远不知道是否有一个神奇的快速按钮(ENGINE=MyISAM 有时有点像 MySql 中某些查询的神奇快速按钮)。我有点想在这里寻找潜在的硬件或集群解决方案。Apache Ignite 是一个潜在的解决方案吗?
再次感谢社区的所有支持和帮助。我希望这可以解决这篇文章中提出的大部分问题。
第二次编辑:下面链接中描述的分区/分片是否是一个潜在的解决方案?
https://user3141592.medium.com/how-to-scale-mysql-42ebd2841fa6
https://dev.mysql.com/doc/refman/8.0/en/partitioning-overview.html
第三次编辑:关于社区标准的说明。
我们的社区标准的一部分是明确地欢迎、包容和友善。
这里使用了 MS Sql Server 标记,因为我要比较的系统之一是 MS Sql Server。我们真的在这里使用非常有限的信息。我有两个系统:我的 MySql 系统,在我运行它时就知道了,而 MS Sql Server 在其他人的系统中运行相同的数据库,我对此知之甚少(我只有一个只读的 sql 提示符) . 我在比较苹果和橙子:相同的查询在橙子(MS Sql Server)上运行良好,但在苹果(MySql 实例)上运行不佳。我想知道为什么,这样我就可以就如何让我的查询在合理的时间内运行做出明智的决定。如何让我的苹果看起来像橘子?我要切换到 MS Sql Server 吗?我需要部署在不同的硬件上吗?另一个系统是否在其数据库实例之上运行某种内存缓存系统?大多数这些可能性都需要大量的时间来探索和验证。所以,是的,我希望得到 MS Sql Server 专家的帮助,他们可能知道是否有缓存选项、事务性 v 仓库选项等可以设置,这将使世界变得不同,这将是神奇的快速按钮。
神奇的快速按钮评论可能有点居高临下。
显示索引的图片显示为我只是试图指出另一个系统似乎在被查询的列上没有索引。在这种情况下,一张图片值一千字。