在MySQL中建立一个临时表从选择索引(Create a temporary table in My

2019-07-18 09:27发布

我有一个存储功能,我使用临时表。 出于性能的考虑,我需要在表中的索引。 不幸的是,我不能使用ALTER TABLE ,因为这会导致一个隐含的承诺。

所以我在寻找的语法添加INDEXtempid创建过程中。 任何人都可以帮助?

CREATE TEMPORARY TABLE tmpLivecheck 
(
    tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM   tblLivecheck_copy
WHERE  tblLivecheck_copy.devId = did;

Answer 1:

我按倒相当长的一段与CREATE TEMPORARY表中选择正确的语法。 已经想通了一些事情,我想与社区的其他人共享的答案。

有关语句的基本信息,请访问以下链接的MySQL:

CREATE TABLE SELECT和CREATE TABLE 。

有时,它可以是艰巨的解释规范。 由于大多数人学到最好的例子,我将分享如何我已经创建了一个工作的声明,以及如何修改它为你工作。

  1. 添加多个指标

    该声明显示了如何添加多个索引(注意,索引名 - 小写 - 可选):

     CREATE TEMPORARY TABLE core.my_tmp_table (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number)) SELECT * FROM core.my_big_table WHERE my_val = 1 
  2. 添加一个新的主键

     CREATE TEMPORARY TABLE core.my_tmp_table (PRIMARY KEY my_pkey (order_number), INDEX cmpd_key (user_id, time)) SELECT * FROM core.my_big_table 
  3. 创建附加列

    你可以创建一个比在SELECT语句中指定的列的新表。 指定表定义的附加列。 在表定义中指定,而不是列在选择发现将在新表中第一列,其次是由SELECT语句插入的列。

     CREATE TEMPORARY TABLE core.my_tmp_table (my_new_id BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number)) SELECT * FROM core.my_big_table 
  4. 重新定义的数据类型从选择列

    你可以重新定义所选择的列的数据类型。 在下面的例子中,列标签是core.my_big_table一个MEDIUMINT,我也重新定义在core.my_tmp_table一个BIGINT。

     CREATE TEMPORARY TABLE core.my_tmp_table (tag BIGINT, my_time DATETIME, INDEX my_unique_index_name (tag) ) SELECT * FROM core.my_big_table 
  5. 在创建高级字段定义

    所有常见的列定义可当你创建一个正常的表作为。 例:

     CREATE TEMPORARY TABLE core.my_tmp_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE, location VARCHAR(20) DEFAULT "NEEDS TO BE SET", country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code", INDEX my_index_name (location)) ENGINE=MyISAM SELECT * FROM core.my_big_table 


Answer 2:

没有找到我自己的答案。 我的问题是,我使用的一个连接,并创建第二个出来的第一个两个临时表。 但该指数创建过程中没有被复制?

CREATE TEMPORARY TABLE tmpLivecheck (tmpid INTEGER NOT NULL AUTO_INCREMENT, PRIMARY    
KEY(tmpid), INDEX(tmpid))
SELECT * FROM tblLivecheck_copy WHERE tblLivecheck_copy.devId = did;

CREATE TEMPORARY TABLE tmpLiveCheck2 (tmpid INTEGER NOT NULL, PRIMARY KEY(tmpid), 
INDEX(tmpid))  
SELECT * FROM tmpLivecheck;

......解决我的问题。

问候...



Answer 3:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
select_statement

例如:

CREATE TEMPORARY TABLE IF NOT EXISTS mytable
(id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM;
INSERT IGNORE INTO mytable SELECT id FROM table WHERE xyz;


文章来源: Create a temporary table in MySQL with an index from a select