скорость mysql_num_rows против ограничения запроса 1

#php #mysql

#php #mysql

Вопрос:

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

на данный момент я делаю

select a.email,b.vuid from user a, verteiler_user b where a.email=''.$email.'' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid

как запрос с mysql_num_rows , затем проверьте if >=1

Но быстрее ли выполнить запрос с ограничением 1; ? и проверить, возвращается ли строка?

Ответ №1:

ДА. Было бы быстрее выполнить limit 1 запрос. И если все, что вы делаете, это проверяете наличие строки, зачем беспокоиться о возврате всех этих столбцов? Просто выберите 1 . Это будет (незначительно) быстрее. Кстати: Ваш код выглядит уязвимым для атак с использованием SQL-инъекций. Рассмотрите возможность очистки динамических частей вашего запроса с помощью mysql_real_escape_string() или аналогичной функции.

Комментарии:

1. @Roby: Вы приняли этот ответ, но затем не приняли его. Почему? Вам нужны какие-либо дополнительные разъяснения?

Ответ №2:

LIMIT 1 будет иметь лучшую производительность, потому что он перестанет соответствовать, когда LIMIT будет удовлетворен.

Если вы ожидаете только 1 строку, добавьте LIMIT 1 в свой запрос.

Кроме того, если вы проверяете только наличие этой строки в запросе, нет необходимости использовать имена столбцов с SELECT в запросе. Просто используйте SELECT 1... .

Ответ №3:

вы могли бы попробовать:

 select count(*) from user a, verteiler_user b 
     where a.email=''.$email.'' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid
  

и получаем количество по:

 $row=mysql_fetch_array(...);
if ($row[0] > 0)  // is there a hit?
   ...