好的,我有一个奇怪的情况
我有一些看起来像这样的代码
public function select($sql, $params = false)
{
$output = false;
$this->_query = $this->escapeInto($sql, $params);
$this->_mysqli->real_query($this->_query);
$result = $this->_mysqli->use_result();
return $result;
}
现在我传入以下查询
$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38500,500";
并且整个函数永远不会返回它将到达函数的末尾,我可以在那里打印调试,但它永远不会返回。
但是,如果我发送任何其他查询,它工作正常。到目前为止,这两项工作和所有500增量都有效。
$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38501,500";
$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38500,501";
我对此问题没有任何其他问题,mysqli似乎工作正常 它只是不会退出这个功能。我假设它与mysqli存在问题,但在那里找不到任何类似的问题。
有什么想法吗?
答案 0 :(得分:0)
当LIMIT大偏移时,mysql几乎肯定需要进行全表扫描来确定顺序,并且通常可以在大表上获得超时。
这几乎是第一次查询时发生的事情。
对于已经放置缓存的后续查询,它将是快速的 (PHP超时不会停止mysql,它仍然在后台处理计算)