I am trying to optimize the export process of a query. I have the following tables (I omit some irrelevant fields):
CREATE TABLE _termsofuse (
ID int(11) NOT NULL AUTO_INCREMENT, TTC_ART_ID int(11) DEFAULT NULL,
TTC_TYP_ID int(11) DEFAULT NULL,
TERM_OF_USE_NAME varchar(200) DEFAULT NULL,
TERM_OF_USE_VALUE varchar(200) DEFAULT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=185905671 DEFAULT CHARSET=utf8;
CREATE TABLE vehicle (
ID mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
TTC_TYP_ID int(11) unsigned NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY TTC_TYP_ID_UNIQUE (TTC_TYP_ID)
) ENGINE=InnoDB AUTO_INCREMENT=44793 DEFAULT CHARSET=utf8;
CREATE TABLE part (
ID int(11) unsigned NOT NULL AUTO_INCREMENT,
TTC_ART_ID int(11) unsigned NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY TTC_ART_ID_UNIQUE (TTC_ART_ID)
) ENGINE=InnoDB AUTO_INCREMENT=3732260 DEFAULT CHARSET=utf8;
CREATE TABLE term_of_use_name (
ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
ID_Lang tinyint(3) unsigned NOT NULL,
Name varchar(200) NOT NULL,
PRIMARY KEY (ID, ID_Lang),
UNIQUE KEY Name_Lang_UNIQUE (Name, ID_Lang),
KEY fk_term_of_use_name_lang_id_lang_idx (ID_Lang),
CONSTRAINT fk_term_of_use_name_lang_id_lang FOREIGN KEY (ID_Lang)
REFERENCES lang (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=732 DEFAULT CHARSET=utf8;
CREATE TABLE term_of_use_value (
ID mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
ID_Lang tinyint(3) unsigned NOT NULL,
Value varchar(200) NOT NULL,
PRIMARY KEY (ID,ID_Lang),
UNIQUE KEY Value_Lang_UNIQUE (Value,ID_Lang),
KEY fk_term_of_use_value_lang_id_lang_idx (ID_Lang),
CONSTRAINT fk_term_of_use_value_lang_id_lang FOREIGN KEY (ID_Lang)
REFERENCES lang (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=887502 DEFAULT CHARSET=utf8;
Now I try to select some columns to a csv file. Afterwards i will import the file to a database table, but I suspect this should not take too much time.
My Select statement is the following:
SELECT DISTINCT vehicle.ID, part.ID, term_of_use_name.ID, term_of_use_value.ID FROM _termsofuse
INNER JOIN vehicle ON vehicle.TTC_TYP_ID = _termsofuse.TTC_TYP_ID
INNER JOIN part ON part.TTC_ART_ID = _termsofuse.TTC_ART_ID
INNER JOIN term_of_use_name ON term_of_use_name.Name = _termsofuse.TERM_OF_USE_NAME AND term_of_use_name.ID_Lang = 2
INNER JOIN term_of_use_value ON term_of_use_value.Value = _termsofuse.TERM_OF_USE_VALUE AND term_of_use_value.ID_Lang = 2
INTO OUTFILE 'termsofuse.csv'
CHARACTER SET utf8
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
This query takes longer than 8 hours on my laptop (I have 4 GB of RAM).
I tried to see the explain of the SELECT part and it shows the following:

I do not understand where exactly is the bottleneck. I have exported a similar (about 95 Million records) query in less than 1h. Also breaking the results into multiple tables using limit
does not seem to help much...
Please have a look and any additional info you require just tell me.
Thank you in advance.
EDIT 15/01/2016
Results of Explain Select