我面临一个奇怪的错误。我在我的本地mac(brew)上安装了5.5.5-10.1.20-MariaDB,在我的prod服务器上安装了5.5.52-MariaDB(centos7)。我的本地数据库内容是来自我的服务器数据库的副本。我已在本地执行此查询:
## CREATE DIRECT RELATION BETWEEN JOURNAL AND PUBLICATION
INSERT INTO journal_publication (journal_id, `publication_id`) (
select issues.journal_id as journal_id, publications.id as publication_id from issues
join publications on issues.id = publications.`issue_id`
where publications.id Not In (select distinct publication_id from journal_publication)
);
它工作正常,执行时间不到一秒。 现在,当我在我的prod服务器上尝试完全相同的查询时,查询永远不会结束并占用所有CPU。此外,我试图解析查询,它在我的本地工作正常:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY issues index PRIMARY issues_journal_id_foreign 5 NULL 70993 Using index; Using temporary
1 PRIMARY publications ref publications_issue_id_foreign publications_issue_id_foreign 5 pubpeer.issues.id 1 Using where; Using index
2 MATERIALIZED journal_publication index NULL PRIMARY 8 NULL 143926 Using index
而我的Prod上的相同查询返回错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO journal_publication (journal_id, `publication_id`)
(select issues.j' at line 2
同样,两个DB的内容相同,主键和索引设置相同。对于记录,当我尝试执行此查询时:
select issues.journal_id as journal_id, publications.id as publication_id from issues
join publications on issues.id = publications.`issue_id`
where publications.id Not In (select distinct publication_id from journal_publication;
在本地或prod只需要一秒钟。
您是否有任何线索或流程可以帮助我了解这些差异?
感谢。
济
答案 0 :(得分:1)
MariaDB服务器版本< 10.0仅支持EXPLAIN SELECT
MariaDB服务器版本> = 10.0另外支持EXPLAIN
UPDATE
,EXPLAIN INSERT
和EXPLAIN DELETE
请注意,版本字符串5.5.5-10.1.20-MariaDB表示MariaDB 10.1.20,因为它只支持主要版本的1位数字,所以需要5.5.5前缀,因为MySQL复制会中断。 / p>