非常に長い時間がかかるクエリ(1100万程度の観測)と3つの結合(チェックするために停止することはできません)があります。結合の1つは、一時テーブルを使用することです。
主キーを含むテーブルのデータを使用して一時テーブルを作成すると、新しいテーブルがインデックスを引き継ぐのでしょうか、それとも(親の主キーを使用して)新しい一時テーブルにインデックスを明示的に作成する必要がありますか?テーブル)?
いいえ-明示的に定義された一時テーブルの場合、インデックスは自動的に定義されません。テーブルの作成中にインデックスを定義するか、後でALTER TABLE ..
。を使用してインデックスを定義する必要があります。
で確認できSHOW CREATE TABLE my_temptable
ます。
次のスクリプトを試してください。
drop table if exists my_persisted_table;
create table my_persisted_table (
id int auto_increment primary key,
col varchar(50)
);
insert into my_persisted_table(col) values ('a'), ('b');
drop temporary table if exists my_temptable;
create temporary table my_temptable as
select * from my_persisted_table;
show create table my_temptable;
alter table my_temptable add index (id);
show create table my_temptable;
最初のSHOW CREATE
ステートメントにはインデックスが表示されません。
CREATE TEMPORARY TABLE `my_temptable` (
`id` int(11) NOT NULL DEFAULT '0',
`col` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
でインデックスを作成した後ALTER TABLE
、2番目のSHOW CREATE
ステートメントでそれを確認できます。
CREATE TEMPORARY TABLE `my_temptable` (
`id` int(11) NOT NULL DEFAULT '0',
`col` varchar(50) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加