我在一个多表中使用一个大的选择,其中有很多行,我需要告诉您没有链接的表。我需要提取每一个并添加到一个数组中。
我的问题是:
当我使用这个时:
mysql> select w.*,s.*,p.*,h.*,c.*,b.*,o.* from
`base` b,`chain` c,`house` h,
`option` o,`piece` p,systems s,
`wall` w;
有时,我在执行查询后得到这个:
错误 2008 (HY000):MySQL 客户端内存不足
执行此函数大约需要 1 分钟,获取数组结果大约需要 1 分钟 40。
之后,我需要使用类似的东西:
$base = $chain =
$house = $option=
$piece= $systems =
$wall = array();
while($row = $data->fetch_array(MYSQLI_ASSOC)) {
//build all array properly
}
是否可以减少执行时间?最好对我需要提取行并将行插入“好”数组的每个表使用 1 个查询?
谢谢
** 编辑 **
我也尝试过这个但同样的事情:
mysql> select w.*,s.*,p.*,h.*,c.*,b.*,o.* from
`base` b INNER JOIN `chain` c INNER JOIN `house` h INNER JOIN
`option` o INNER JOIN `piece` p INNER JOIN systems s INNER JOIN
`wall` w;
最佳答案
您应该对每个表进行查询。
您提到的查询执行笛卡尔连接,这几乎肯定不是您想要的。在笛卡尔连接中,每行都包含来自每个表的数据,总行数将是每个表总行数的乘积(即,如果每个表有 10 行,则查询将返回 10,000,000 行)。该脚本内存不足,因为您的查询获取的数据比您实际感兴趣或使用的数据多很多倍。
对每个表使用单个查询只会获取您想要的数据,并且应该可以工作并且速度更快。
关于php - Mysql:提取多表中未链接数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542384/