我一直在寻找这种比较或某种性能平衡。
到目前为止我所知道的是:
MERGE是已经在 SQL Server 上实现的T-SQL命令。据我所知,它的性能非常好,因为它使用“有点像” INNER JOIN哈希映射来插入和更新,但是在使用CLUSTERED INDEX时,我在同一个MERGE语句上删除时也遇到了一些问题. 除此之外,它非常快,让我在更新或插入某些东西之前做一些比较子句,所以对我来说非常灵活。
在 SQL Server 中,某些特定场景宁愿将UPDATE和INSERT用作单独的语句,我不反对。在我短暂的经验中,我会默认使用MERGE作为我的代码的标准。
现在作为一名 DBA,我面临着一个新的挑战,我还必须管理 MySQL 服务器,所以我最终在 MySQL 中寻找类似的MERGE行为来提高查询的性能。到目前为止,除了INSERT ... ON DUPLICATE KEY ... UPDATE之外,我没有发现任何相似之处。尽管如此,我还是有一些性能问题,因为我不确定它在服务器上的表现如何,它是如何工作的,以及可选的语句对是否会比这更好或更快地工作。
在 MySQL 中环顾四周,我发现UPDATE + INSERT IGNORE、UPDATE + INSERT、INSERT ... REPLACE等等。
在尝试确定我是否可以使用其他一些子句时,MySQL 文档有点令人困惑。在MERGE语句中,我可以使用AND (TARGET.COLUMN_X > 'VALUE'):
MERGE _TABLE A_ AS TARGET WITH _TABLE B_ AS SOURCE ON (TARGET.KEY = SOURCE.KEY) WHEN MATCHED AND (TARGET.COLUMN_X > 'VALUE') UPDATE TARGET.COLUMN_A = SOURCE.COLUMN_A ...
我找不到如何在 MySQL 上执行此操作。
*注意事项
我必须对此进行管理以实现更好的时间结果和性能友好。
我有什么设置:
PERCONA MySQL
- txt文件,每个飞蛾都需要将新数据和一些更改上传到表中(这就是为什么我正在寻找类似MERGE的语句)
- InnoDB MySQL 引擎
- 关系数据库表,因此我无法删除或截断目标表,因为它们都是相关的。