【问题标题】:mysql create table query taking too long to executemysql 创建表查询执行时间过长
【发布时间】:2021-10-19 04:48:34
【问题描述】:

我正在运行一个 mysql 查询。 选择查询被执行,但创建表查询给出了超时问题。这里可能是什么问题。 以下是查询:

Create table application_details as (
Select
app.*,
temp.occupation,
temp.monthly_income as 'payment'
 from app_ss as app
              inner JOIN v_employ temp
              ON (app.application_id = temp.application_id)
         )

【问题讨论】:

    标签: mysql join inner-join amazon-rds


    【解决方案1】:

    当您使用显示的查询创建表时,服务器必须:

    1. 执行查询并获得完整的输出(不是引用数组而是完整的值数组,并且这个输出可能会被物化)。
    2. 扫描每一列中的所有值,并为要创建的表的每一列确定正确的数据类型和另一个基本属性。
    3. 创建一个表。
    4. 将所有值插入表中。

    当然这个过程不可能很快,尤其是当SELECT部分​​的输出很大的时候。

    PS。 temp.monthly_income as 'payment' 中的单引号字符不正确(即语法正确但意识形态错误 - 请参阅 cmets) - 请改用反引号。

    【讨论】:

    • mysql 允许使用单引号将别名括起来,但是不能使用单引号字符串来引用别名。所以,select 1 as 'alias' 可以,但是 select fieldname as 'alias' group by 'alias' 不行。
    • @Shadow mysql 允许用单引号括起别名 你能指点我参考手册引用吗?我知道 MySQL 使用反引号,并且当启用 ANSI_QUOTES 模式时,使用双引号字符。 MySQL 可以(但不必)正确区分用单引号括起来的文字是别名 - 有时,当文字显然只能是别名时,在所有其他情况下,这会产生语法错误。
    • @Shadow 谢谢。但我认为“你可以……但你不应该”。
    • 不应该不代表不正确。问题中的别名部分遵循正确的语法。你可能不喜欢,但这不等于不正确。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多