mysql_num_rows () php - это эффективно? - PullRequest
6 голосов
/ 15 сентября 2011

У меня есть несколько SELECT операторов на странице PHP, и я использовал Dreamweaver для их генерации.

После прохождения кода, который он сгенерировал, мне показалось, что в большинстве случаев у меня было много пустяков, в качестве примера можно привести строку mysql_num_rows() для каждого оператора.

Так что мне интересно, может ли кто-нибудь сказать мне, действительно ли это экономит ресурсы - учитывая, что запрос выполняется независимо от того, есть ли какие-то фактические издержки для этого?


UPDATE: Следуя совету Крисумы о микротайме, вот мои результаты:

//time before running the query
1: 0.46837500 1316102620

//time after the query ran
2: 0.53913800 1316102620

//time before calling mysql_num_rows()
3: 0.53914200 1316102620

//time after mysql_num_rows()
4: 0.53914500 1316102620 

Так что не так уж много накладных, кажется

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

mysql_num_rows () считает строки после они были получены. Это похоже на то, что вы извлекли все строки и сохранили их в массиве PHP, а затем запустили count($array). Но mysql_num_rows () реализована в C в клиентской библиотеке MySQL, поэтому она должна быть немного более эффективной, чем эквивалентный код PHP.

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

3 голосов
/ 15 сентября 2011

Я ожидаю, что такой вызов будет иметь минимальное влияние на производительность.Он просто считает строки своего внутреннего сохраненного результата запроса.Сам SQL-запрос займет большую часть времени обработки.

Если вы хотите знать наверняка, вы можете выполнить microtime () до и после вызова, чтобы точно узнатьдолго это займет.

$startTime = microtime(true);
mysql_num_rows();
$time = microtime(true) - $startTime;
echo("mysql_num_rows() execution: $time seconds\n");

Я подозреваю, что вы увидите что-то в диапазоне микросекунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...