我有一个MySQL临时表,是从PHP文件创建的,我需要迭代并重复双循环中的所有行,因此我经常使用mysqli_fetch_row()
和mysqli_data_seek()
。
性能至关重要因此我将临时表的ENGINE声明为MEMORY,因为我不希望mysqli_data_seek()
或mysqli_fetch_row()
触及硬盘。但是,看看我的代码,我想知道临时表的引擎是否很重要,因为我只是在我SELECT * FROM
之后立即删除表,然后它将由PHP完成。
$q = "CREATE TEMPORARY TABLE Drk ENGINE=MEMORY AS SELECT ...";
mysqli_query($q);
$DRK = mysqli_query("SELECT * FROM Drk");
mysqli_query('DROP TEMPORARY TABLE IF EXISTS Drk');
while (...)
{
// some mysqli_fetch_row($DRK) and mysqli_data_seek($DRK, $i) calls here
while (...)
{
// more of mysqli_fetch_row($DRK) and mysqli_data_seek($DRK, $j) calls here
}
}
所以我的问题是基本的:幕后实际发生了什么? SELECT * FROM
存储的结果在哪里以及如何强制它留在内存中?更好的是,我想"直接"访问并遍历我的临时内存表的行,而没有调用表面看起来多余的SELECT * FROM Drk
并再次复制所有内容。