SQL & amp; PHP - что быстрее mysql_num_rows () или 'select count ()'?

Backticks заключают литералы шаблонов, p.k.a. Шаблоны. Литералы шаблонов являются строковыми литералами, которые позволяют встроенные выражения и функции интерполяции строк.

Литералы шаблонов имеют выражения, вложенные в заполнители, обозначенные знаком доллара и фигурными скобками вокруг выражения, то есть ${expression}. Заполнитель / выражения передаются функции. Функция по умолчанию просто конкатенирует строку.

Чтобы избежать обратного хода, поставьте перед ним обратную косую черту:

`\`` === '`'; => true

Используйте обратные элементы для более легкой записи многострочной строки:

console.log(`string text line 1 
string text line 2`);

или

console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);

vs. vanilla JS:

console.log('string text line 1\n' + 
'string text line 2');

или

console.log('Fifteen is ' + (a + b) + ' and\nnot ' + (2 * a + b) + '.');

Последовательности выхода:

  • Эскапады Unicode начинаются с \u, например \u00A9
  • Эскизы кодовой точки Unicode, обозначенные \u{}, например \u{2F804}
  • Шестнадцатеричные escape-последовательности, начатые с помощью \x, например \xA9
  • Octal буквальные escape-последовательности, начатые символами \ и (a), например \251
30
задан Joel 20 March 2010 в 23:46
поделиться

4 ответа

mysql_query () передает все записи результатов из MySQL в php pcrocess перед возвратом (в отличие от mysql_unbufferd_query () ). Одно это сделало бы версию mysql_num_rows () медленнее.

Кроме того, для некоторых механизмов (например, MyISAM) MySQL может обслуживать запрос Count (*) из индекса таблицы , не затрагивая фактические данные . С другой стороны, SELECT * FROM foo приводит к полному сканированию таблицы, и MySQL должен прочитать каждый отдельный набор данных.

30
ответ дан 28 November 2019 в 00:08
поделиться

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

Второй метод не только считывает всю таблицу в память, но и отправляет ее клиенту через сеть до того, как клиент подсчитает строки. Чрезвычайно расточительно!

6
ответ дан 28 November 2019 в 00:08
поделиться

Я действительно не думаю, что нужно какое-либо тестирование.

Выполнение COUNT в запросе SQL

1) Отправляет только одну строку данных обратно клиенту (вместо каждой строки)

2) Позволяет SQL производить подсчет {{1} } для вас, который, вероятно, всегда будет быстрее, чем PHP.

1
ответ дан 28 November 2019 в 00:08
поделиться

Я думаю, что count(1) будет еще быстрее:

$res = mysql_query("SELECT count(1) as `number` FROM `table1`");
$count = mysql_fetch_result($res,0,'number');

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

0
ответ дан 28 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: