通过mySQL MEMORY表迭代

时间:2014-08-28 06:31:05

标签: php mysql database-performance temp-tables

我有一个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并再次复制所有内容。

0 个答案:

没有答案