@ серебристый -
Основы циклов 101 (или простое кодирование 101): уберите код, инвариантный к циклам, из циклов. Зачем вам готовить оператор в цикле, когда он не принимает параметров, которые зависят от самого цикла?
Конечно, гонады будут сосать, если вы будете использовать подготовленные операторы, если будете готовить их с каждой итерацией цикла. Сверхнормативная нагрузка, которую вы наблюдаете, заключается в том, что изначально готовится оператор, а не в его выполнении.
Повторите код и повторите попытку:
$stmt = $con -> prepare( " SELECT MAX(id) AS max_id , MIN(id) AS min_id FROM tb ");
$res = $con -> prepare( " SELECT * FROM tb WHERE id >= ? LIMIT 0,1 ");
for ($i=0; $i<1000; $i++) {
$stmt -> execute();
$stmt->bind_result($M,$m);
$stmt->free_result();
$rand = mt_rand( $m , $M ).'<br/>';
$res -> bind_param("s", $rand);
$res -> execute();
$res->free_result();
}
Предупреждение здесь , однако, заключается в том, что разница между подготовленным оператором и неподготовленным становится незначительной, так как время вычисления для выполнения запроса и выборки данных становится большой.
Просто чтобы вытащить несколько вымышленных чисел из моего @@@ ради иллюстрации:
Скажем, что сам запрос и выборка данных занимают 0,01 с (назовите это A). Также представьте, что построение и выполнение кода за подготовленным оператором занимает 0,01 с (X), а для неподготовленного запроса - 0,05 с или 5 * 0,01 с (Y = 5 * X). Соотношение между подготовленным и неподготовленным кодом будет:
(A + Y)/(A + X) = 0.06sec/0.02sec = 3 -> unprepared execution is three times slower
И давайте предположим, что для другого запроса время выборки (из-за объема данных или пропускной способности сети) составляет 10 сек (1000 * 0,01 сек). Тогда соотношение меняется
(A + Y)/(A + X) = 10.05sec/10.01sec ~=~ 1.004
Они в значительной степени неразличимы. Я пытаюсь сказать, что да, подготовленные операторы быстрее (и что вы должны их использовать), НО тест, который вы реализуете, не обязательно является хорошим способом выяснить это или оценить их ценность. Вы должны принять во внимание другие факторы, чтобы реально измерить производительность, которую вы из них извлекаете.