У меня есть таблица mysql, я хочу проверить, существует ли строка, где columnA = $ a и $ columnB = $ b. Мне не нужно ничего выбирать. Каким должен быть эффективный запрос? В настоящее время я делаю,
if ($stmt = mysqli->prepare("SELECT * FROM TABLE WHERE columnA=? && columnB= ? LIMIT 1")) { $stmt->bind_param("ss", $a, $b); $stmt->execute(); $stmt->store_result(); $count=$stmt->num_rows; $stmt->close(); } return ($count > 0 ? true : false);
Попробуйте следующее:
if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM TABLE WHERE columnA=? && columnB=?")) { $stmt->bind_param("ss", $a, $b); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); } return ($count > 0 ? true : false);
Теперь вы сможете это сделать
Это эффективный запрос, если вы хотите улучшить этот запрос, вы должны выбрать один столбец только для ускорения запроса.
if ($stmt = mysqli->prepare("SELECT id FROM TABLE WHERE columnA=? && columnB= ? LIMIT 1")) {
Выберите только одно поле из строки, а не все ( *
). Несмотря на то, что вы их не используете, mysql все еще должен извлекать их из хранилища и получать их для передачи.
SELECT columnA FROM table WHERE ...
В противном случае вы ничего не можете сделать, чтобы улучшить ситуацию, кроме того, чтобы помещать индексы в столбцы A и columnB, чтобы ускорить поиск.