同样的一个 UPDATE JOIN, SQL Server 和 MySQL 的差距巨大。数据库调优达人进来分析下!

2021-11-11 20:47:34 +08:00
 qwerthhusn

首先是建表语句,有两张表,MySQL 和 SQL Server 一模一样。

create table small_table(
    id bigint not null primary key,
    varchar_1 varchar(255),varchar_2 varchar(255),varchar_3 varchar(255),varchar_4 varchar(255),varchar_5 varchar(255),
    datetime_1 datetime,datetime_2 datetime,datetime_3 datetime,
    connect_column varchar(255),
    datetime_4 datetime,datetime_5 datetime,
    int_1 int,int_2 int,int_3 int,int_4 int,int_5 int
);
create table big_table(
    id bigint not null primary key,
    varchar_1 varchar(255),varchar_2 varchar(255),varchar_3 varchar(255),varchar_4 varchar(255),varchar_5 varchar(255),
    datetime_1 datetime,datetime_2 datetime,datetime_3 datetime,
    connect_column varchar(255),
    datetime_4 datetime,datetime_5 datetime,
    int_1 int,int_2 int,int_3 int,int_4 int,int_5 int,
    copy_1 varchar(255), copy_2 datetime, copy_3 int
);

small_table 有 7000 条数据,id 从 0 到 6999 ,所有字段都是随机值充数的,除了 connect_column ,这个字段取了七千个不重复的字符串。 big_table 有 50 万条数据,id 从 0 到 499999 ,所有字段都是随机值充数的,除了 connect_column ,这个字段和上面一样,七千个值随机分布到 50 万条数据里面。

现在对着 MySQL 执行,直接卡住,几分钟也不会返回。

update big_table bt
    inner join small_table st on bt.connect_column = st.connect_column
set bt.copy_1 = st.varchar_1,
    bt.copy_2 = st.datetime_1,
    bt.copy_3 = st.int_1
where bt.id >= -1;

现在对着 SQL Server 执行,5 秒左右直接结束

update bt
set bt.copy_1 = st.int_1,
    bt.copy_2 = st.datetime_1,
    bt.copy_3 = st.int_1
from big_table bt
    inner join small_table st on bt.connect_column = st.connect_column;

我想知道是什么原因导致了这种巨大的差距??? 我 MySQL 用的是 8 ,SQL Server 用的是 2017.。。 两个都是通过 docker desktop 运行的,默认配置没有任何修改。

690 次点击
所在节点    程序员
2 条回复
SmiteChow
2021-11-12 10:23:48 +08:00
sql 语句都不一样啊
qwerthhusn
2021-11-12 10:57:08 +08:00
@SmiteChow 一样的,只是两个 DBMS 的 SQL 语法不一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/814775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX