선택한 색인으로 MySQL에 임시 테이블 만들기
임시 테이블을 사용하는 저장 기능이 있습니다.성능상의 이유로 그 표에 색인이 필요합니다.아쉽게도 사용할 수 없습니다.ALTER TABLE
암묵적인 커밋을 일으키기 때문입니다.
그래서 나는 구문을 찾고 있다.INDEX
위해서tempid
생성 중.누구 도와줄 사람 있나요?
CREATE TEMPORARY TABLE tmpLivecheck
(
tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM tblLivecheck_copy
WHERE tblLivecheck_copy.devId = did;
CREATE TEMPASIAL TABLE SELECT의 올바른 구문에 대해 한참 동안 씨름했습니다.몇 가지 사항을 파악한 후, 저는 그 답을 커뮤니티의 다른 사람들과 공유하고 싶었습니다.
문의 기본 정보는 다음 MySQL 링크에서 확인할 수 있습니다.
CREATE TABLE SELECT 및 CREATE TABLE.
때때로 사양을 해석하는 것이 어려울 수 있습니다.대부분의 사람들이 예시를 통해 가장 잘 배우므로, 내가 어떻게 작업 명세서를 작성했는지, 그리고 어떻게 수정할 수 있는지 알려드리겠습니다.
여러 인덱스 추가
이 문장은 여러 인덱스를 추가하는 방법을 보여 줍니다(인덱스 이름(소문자)은 선택 사항임).
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
새 기본 키 추가:
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
추가 열 생성
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
SELECT에서 열에 대한 데이터 유형 재정의
선택 중인 열의 데이터 유형을 다시 정의할 수 있습니다.다음 예시에서 컬럼태그는 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
생성 중 고급 필드 정의
일반 테이블을 작성할 때와 마찬가지로 모든 일반 열 정의를 사용할 수 있습니다.예:
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
나 스스로 답을 찾았지문제는 두 개의 임시 테이블을 결합에 사용하고 첫 번째 테이블 중 두 번째 테이블을 만드는 것이었습니다.그러나 인덱스는 생성 중에 복사되지 않았습니다...
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;
...내 문제를 해결했다.
인사말...
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;
언급URL : https://stackoverflow.com/questions/14397785/create-a-temporary-table-in-mysql-with-an-index-from-a-select
'programing' 카테고리의 다른 글
초기화되지 않은 개체 vs NULL로 초기화됨 (0) | 2022.12.25 |
---|---|
Workbench를 사용하여 서버에서 데이터베이스의 ER 모델을 가져오는 방법 (0) | 2022.12.25 |
Scala 코드가 단순해 보이는/줄 수가 적은 Scala 및 Java 코드 샘플? (0) | 2022.12.25 |
MariaDB의 have_ssl이 DISABLE인 채로 Debian 및 YaSSL에서 SSL을 활성화할 수 없습니다. (0) | 2022.12.25 |
프라이머리 키는 MySQL에서 자동으로 인덱싱됩니까? (0) | 2022.12.25 |