【问题标题】:Is MySQL Query framed properly?MySQL Query 的框架是否正确?
【发布时间】:2017-02-20 11:36:51
【问题描述】:

我正在尝试在 AWS ec2 xlarge 实例上运行以下查询:

mysql> CREATE TABLE 3 SELECT * FROM TABLE 2 WHERE ID IN (SELECT ID FROM TABLE1);

我尝试使用 ec2,因为我认为可能是我的笔记本电脑在进行查询,因为 Table1 有 14000 行和 6 列,而表 2 有大约 100 万行和 11 列。但是我得到:

写入失败:管道损坏

使用 aws 实例时,我的笔记本电脑上的 DBMS 超时。

查询应该比这些超时触发器采取 > 吗?无论如何要更好地表达查询?

【问题讨论】:

  • 为什么会被否决?我没有正确地提出问题吗?
  • 有些奇怪的人没有动力投了票,...别担心
  • 只是想确保我没有违反任何论坛规则
  • 不......你的问题..是正确和正确的..提议..有时..有人..看看并没有动力投反对票...耐心

标签: mysql ubuntu amazon-ec2


【解决方案1】:

MySQL 在执行WHERE table1.id IN (SELECT table2.id ...) 方面非常糟糕。最好使用JOIN

CREATE TABLE Table3
SELECT t2.*
FROM Table2 AS t2
JOIN Table1 AS t1 ON t1.id = t2.id

【讨论】:

  • 如果我只想要 ID 列,是否必须选择所有行 (t1.*)?
  • 您应该选择要放入Table3 的任何列。我使用了SELECT t1.*,因为您的问题有SELECT *
  • 我有 Table1Table2 从你的问题倒过来,我已经解决了。
  • 已经 10 多分钟了,进程仍在运行,这是 MySQL 的典型行为吗?
  • 确保两个表的id 列都有索引。
【解决方案2】:

尝试逻辑拆分查询

CREATE TABLE3 
SELECT * 
FROM TABLE2 
WHERE ID IN (SELECT ID FROM TABLE1 where id between 1 and 10000);

然后

insert into table3
SELECT * 
FROM TABLE2 
WHERE ID IN (SELECT ID FROM TABLE1 where id between 10001 and 20000);  

【讨论】:

  • 谢谢,我会告诉你发生了什么。
  • 使用 CT -A;读取表信息以完成表名和列名您可以使用 -A 关闭此功能以更快地启动
  • 当我执行时,它仍然需要很长时间才能打开数据库......因为这是一个相当强大的实例,这种行为对于 MySQL 来说是否正常?
  • @Stacksofoverflow 我不明白你的评论..请解释清楚
  • 抱歉,有一些后台进程必须被杀死
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2019-01-13
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多