php Mysqli use_result предел нечетности - PullRequest
0 голосов
/ 02 декабря 2011

Хорошо, у меня странная нечетная ситуация

У меня есть код, который выглядит примерно так

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";

У меня нет проблем с любым другим запросом, только этот, и MySQL, кажется, работает нормально его просто не выйдет из этой функции. Я предполагаю, что это проблема с MySQL, но не могу найти никаких проблем, подобных этой.

Есть идеи?

1 Ответ

0 голосов
/ 02 декабря 2011

Когда LIMIT большое смещение, mysql почти наверняка потребуется выполнить полное сканирование таблицы, чтобы определить порядок, и обычно может получить тайм-аут на большой таблице.

Это почти то, что происходит во время первого запроса.

Для последующих запросов, где кеш уже находится, он будет быстрым
(Тайм-аут PHP не останавливает mysql, он все еще обрабатывает вычисления в фоновом режиме)

...