Правильна перевірка існування записів у таблиці MySQL
Жоден проект не обійдеться без перевірки існування записів у таблиці MySQL. Наприклад, перевірка існування конкретної статті, перевірка наявності у базі Email та багато інших ситуацій.

Опишемо можливі способи перевірки існування записів та на прикладах розберемо, що краще використовувати: COUNT() або Mysql_num_rows.
Розберемо різні варіанти:
Розглянемо другий варіант:
В даному випадку пошук завершився за 0.000220 секунди.
Різниця в цих випадках дуже мінімальна, можна навіть сказати ніякої. Більше того, результат може бути на користь як першого, і другого прикладу. Перший варіант використовує трохи більше оперативної пам'яті, на ця різниця не заслуговує на увагу.
Тепер найцікавіше! У перших двох варіантах ми шукали за унікальним полем ID, де результат завжди був або 0, або 1. Якщо шукати кілька полів, де дані можуть бути однаковими, необхідно чітко використовувати різні підходи.
Тепер давайте розберемося, який варіант де використовувати:
Результат виконання для 100 000 записів дорівнює 0.07005 секунди.
При аналогічній кількості результатів вибірки швидкість виконання прикладу становить 0.04640 секунд.
Як видно з результатів тестів, функцію Mysqli_num_rows потрібно використовувати, коли шукаємо існування одного унікального запису, а COUNT(*) - якщо потрібно знайти кілька полів. Різниця у швидкості майже вдвічі швидша.

Опишемо можливі способи перевірки існування записів та на прикладах розберемо, що краще використовувати: COUNT() або Mysql_num_rows.
Розберемо різні варіанти:
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$result = mysqli_query($link, "SELECT COUNT(*) as count FROM `test` WHERE (`id` = '9999')");
$row = mysqli_fetch_assoc($result);
echo $row['count'];Цей пошук завершився за 0.000226 секунди.Розглянемо другий варіант:
$result = mysqli_query($link, "SELECT `id` FROM `test` WHERE (`id` = '9999')");
echo mysqli_num_rows($result);В даному випадку пошук завершився за 0.000220 секунди.
Різниця в цих випадках дуже мінімальна, можна навіть сказати ніякої. Більше того, результат може бути на користь як першого, і другого прикладу. Перший варіант використовує трохи більше оперативної пам'яті, на ця різниця не заслуговує на увагу.
Тепер найцікавіше! У перших двох варіантах ми шукали за унікальним полем ID, де результат завжди був або 0, або 1. Якщо шукати кілька полів, де дані можуть бути однаковими, необхідно чітко використовувати різні підходи.
Тепер давайте розберемося, який варіант де використовувати:
$result = mysqli_query($link, "SELECT `id` FROM `test` WHERE (`cache` = '37693cfc748049e45d87b8c7d8b9aacd')");
if (mysqli_num_rows($result)) {
...
}Результат виконання для 100 000 записів дорівнює 0.07005 секунди.
$result = mysqli_query($link, "SELECT COUNT(*) as count FROM `test` WHERE (`cache` = '37693cfc748049e45d87b8c7d8b9aacd')");
$row = mysqli_fetch_assoc($result);
if ($row['count'] > 2) {
...
}При аналогічній кількості результатів вибірки швидкість виконання прикладу становить 0.04640 секунд.
Як видно з результатів тестів, функцію Mysqli_num_rows потрібно використовувати, коли шукаємо існування одного унікального запису, а COUNT(*) - якщо потрібно знайти кілька полів. Різниця у швидкості майже вдвічі швидша.
