2011-09-26 4 views

Odpowiedz

23

To zależy od wybranego silnika. Domyślnie dane tabeli będą przechowywane na dysku. Jeśli określisz silnik MEMORY, dane będą przechowywane tylko w pamięci.

Powinno być możliwe znalezienie plików utworzonych w systemie plików podczas tworzenia tabel tymczasowych. Po uruchomieniu następujące polecenia:

CREATE TABLE test.table_myisam (x int) ENGINE=MyISAM; 
CREATE TABLE test.table_memory (x int) ENGINE=MEMORY; 
CREATE TEMPORARY TABLE test.temp_table_myisam (x int) ENGINE=MyISAM; 
CREATE TEMPORARY TABLE test.temp_table_memory (x int) ENGINE=MEMORY; 

I następnie sprawdzane w katalogu: C: \ ProgramData \ MySQL \ MySQL 5.5 \ data \ Test Server (Windows) i pliki Obecni byli:

 
table_innodb.frm # Table definition. 
table_innodb.MYD # MyISAM table data file. 
table_innodb.MYI # MyISAM table index file. 

table_memory.frm # No MYD or MYI file for the MEMORY engine. 

Tabele tymczasowe są przechowywane w C: \ Windows \ Temp i mają nietypowe nazwy, ale wewnętrznie dane są przechowywane w ten sam sposób.

 
#sql9a0_7_d.frm # This is the MyISAM temporary table. 
#sql9a0_7_d.MYD # MyISAM data file for temporary table. 
#sql9a0_7_d.MYI # MyISAM index file for temporary table. 

#sql9a0_7_c.frm # This is the MEMORY engine file. No MYD or MYI. 
+4

Jeśli określisz silnik "blackhole", będzie on przechowywany w specjalnym urządzeniu:/dev/null. – Johan

+2

Cóż, nie będą one nazywane "temp_table_innodb" na dysku, ponieważ tabela tymczasowa jest dostępna tylko dla tego jednego połączenia, tak że jeśli tworzysz dwa osobne połączenia z bazą danych i tworzysz tabelę tymczasową z każdym, możesz nazwać je to samo i nie będą ze sobą kolidować. To wszystko powiedziało, nie mam pojęcia, czy są w pamięci, czy na dysku. Zgaduję, ale nie wątpię, że się mylę, więc nie zrobię tego. – Kenny

+0

@Kenny: Znalazłem je ... w folderze temp (oczywiście!). Zobacz zaktualizowaną odpowiedź. –

4

Tak jak powiedział Mark, zależy to od tego, którego SILNIKA użyjesz. Jeśli nie podasz SILNIKA, zrobi on "coś", ale niekoniecznie utrzyma go tylko w pamięci. Jeśli chcesz, aby wymusić tabelę być w pamięci, trzeba określić go jednoznacznie:

CREATE TEMPORARY TABLE foobar (id int) ENGINE=MEMORY; 

Jednak korzystanie z pamięci silnika jest ograniczona. Aby uzyskać więcej informacji, spójrz na http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html.

+2

Należy zauważyć, że (przynajmniej w MySQL 5.1.63) utworzone przez użytkownika tabele temp są ograniczone przez max_heap_table_size iw przeciwieństwie do wewnętrznych tabel tymczasowych, NIE zostaną przekonwertowane na tablice tymczasowe na dysku, jeśli/kiedy rosną zbyt duże. Wstawienie większej ilości danych spowoduje błąd. –

+2

powyższe łącze służy do wewnętrznej tabeli tymczasowej (wygenerowanej w celu wykonania niektórych zapytań sql), a nie do jawnej tabeli tymczasowej. –

Powiązane problemy