English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kurz über die MySQL-Temportabellen und abgeleiteten Tabellen

Über abgeleitete Tabellen

Wenn die Hauptabfrage eine abgeleitete Tabelle enthält oder wenn die SELECT-Anweisung den UNION-Ausdruck enthält oder wenn die SELECT-Anweisung einen ORDER BY-Ausdruck für ein Feld enthält (und eine GROUP BY-Anweisung für ein anderes Feld), muss MySQL eine temporäre Tabelle automatisch erstellen, um die temporäre Ergebnismenge zu speichern. Diese temporären Tabellen werden von MySQL selbst erstellt und verwaltet und werden zu automatisch erstellten temporären Tabellen. Für automatisch erstellte temporäre Tabellen verwendet MySQL immer zuerst Speicher-TEMPORÄRE Tabellen, da die Leistung von Speicher-TEMPORÄRE Tabellen überlegen ist. Wenn die Speicher-TEMPORÄRE Tabelle zu groß wird, erreicht sie einen bestimmten Schwellenwert, und die Speicher-TEMPORÄRE Tabelle wird in eine externen TEMPORÄRE Tabelle umgewandelt. Das bedeutet, dass die externen TEMPORÄRE Tabellen eine Erweiterung der Speicher-TEMPORÄRE Tabellen im Bereich der Speicherplatz sind. Der Schwellenwert für die Umwandlung von Speicher-TEMPORÄRE Tabellen in externe TEMPORÄRE Tabellen wird durch den kleineren Wert der Systemvariablen max_heap_table_size und tmp_table_size bestimmt.

Abgeleitete Tabellen werden im FROM-Ausdruck verwendet. Zum Beispiel:

select * from (select * from table) as t;

Über temporäre Tabellen

Wenn Sie mit sehr großen Tabellen arbeiten, benötigen Sie möglicherweise gelegentlich viele Abfragen, um eine kleine Menge an Daten zu erhalten, anstatt diese Abfragen auf die gesamte Tabelle anzuwenden. Es könnte schneller sein, wenn MySQL jedes Mal die benötigten wenigen Zeilen findet und die Zeilen in eine temporäre Tabelle auswählt, um darauf Abfragen durchzuführen.

Das Erstellen einer temporären Tabelle ist einfach, fügen Sie dem regulären CREATE TABLE Statement den Schlüsselwort TEMPORARY hinzu:

CREATE TEMPORARY TABLE tmp_table
name VARCHAR10) NOT NULL
value INTEGER NOT NULL
)

Die temporäre Tabelle wird während Ihrer Verbindung zu MySQL existieren. Wenn Sie sich verbinden, löscht MySQL die Tabelle automatisch und freigibt den verwendeten Speicher. Natürlich können Sie die Tabelle während der Verbindung löschen und den Speicher freigeben.

DROP TABLE tmp_table

Wenn beim Erstellen einer temporären Tabelle mit dem Namen tmp_table bereits eine Tabelle mit dem Namen tmp_table in der Datenbank existiert, muss die temporäre Tabelle (versteckt) vor der nicht-temporären Tabelle tmp_table abgeblendet werden.

如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

CREATE TEMPORARY TABLE tmp_table
name VARCHAR10) NOT NULL
value INTEGER NOT NULL
) TYPE = HEAP

因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快一些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。

正如前面的建议,你应该测试临时表,看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能并不快。

1。临时表在断开与MySQL的连接后,系统会自动删除临时表中的数据,但这仅限于使用以下语句建立的表:

定义字段:

CREATE TEMPORARY TABLE tmp_table
name VARCHAR10) NOT NULL
value INTEGER NOT NULL
)

2) 直接将查询结果导入临时表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

2。另外,MySQL也允许你在内存中直接创建临时表,因为是在内存中,所以速度会很快。语法如下:

CREATE TEMPORARY TABLE tmp_table
name VARCHAR10) NOT NULL
value INTEGER NOT NULL
) TYPE = HEAP

3从上面的分析可以看出,临时表的数据会被清空。你断开了连接,数据就会被自动清空。但是,你程序中不可能每次执行SQL就连接一次数据库吧(如果是这样的话,那就会出现你担心的问题,如果不是就没有问题)。因为只有断开数据库连接,数据才会被清空。在一个数据库连接中执行多次SQL,系统是不会自动清空临时表数据的。

声明:本文内容来自互联网,版权属于原作者。内容由互联网用户自发贡献并自行上传,本网站不拥有所有权,未进行人工编辑处理,也不承担相关法律责任。如果您发现涉嫌版权的内容,欢迎发送邮件至:notice#w进行举报,并提供相关证据。3声明:本文内容来自互联网,版权属于原作者。内容由互联网用户自发贡献并自行上传,本网站不拥有所有权,未进行人工编辑处理,也不承担相关法律责任。如果您发现涉嫌版权的内容,请发送邮件至:notice#w进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。

Dir vielleicht gefällig