В чем разница между SELECT * и значением SELECT

0

Какая разница между

    $query = "SELECT email FROM users WHERE username='$username' ";
    $result = mysqli_query($db, $query);
    $row = mysqli_fetch_array($result);
    $email = $row['email'];
    $_SESSION['email'] = $email;

а также

    $query = "SELECT * FROM users WHERE username='$username' ";
    $result = mysqli_query($db, $query);
    $row = mysqli_fetch_array($result);
    $email = $row['email'];
    $_SESSION['email'] = $email;

Они оба возвращают одинаковое значение, есть ли более эффективный способ сделать это?

  • 1
    Я думаю, что все ответы охватили это довольно основательно, но для конкретного примера; представьте разницу в производительности, если бы у users было большое поле большого двоичного объекта, в котором хранилось изображение профиля с высоким разрешением.
  • 1
    В принципе, никогда не используйте зло SELECT * , и вы будете делать это хорошо.
Показать ещё 1 комментарий
Теги:
select
session

4 ответа

1

select * будет возвращать значения для всех столбцов в таблице, у которых есть строки, соответствующие вашему предикату, тогда как select column_name будет возвращать значения только в столбце column_name для строк, соответствующих вашему предикату.

1

SELECT column возвращает только значение этого столбца. SELECT * возвращает значение каждого столбца в таблице. Если бы вы использовали print_r($row) в своем втором блоке кода, вы увидели бы гораздо больше элементов в массиве, чем просто $row['email'].

Существует хороший Q & здесь, который говорит об относительных различиях производительности SELECT * и SELECT column. @Uueerdo указывает на одно из других полей с огромным blob, вызывающим проблемы с производительностью, также очень актуально.

Вы также можете столкнуться с проблемами с SELECT * когда вы используете таблицы JOIN IN, если обе таблицы имеют одинаково названные столбцы, тогда значения из одной таблицы могут перезаписывать другую, когда данные возвращаются в структуру приложения.

0
  • Выбирает все, что означает, что он вернет все столбцы. Но "выберите адрес электронной почты" вернет столбец "email", который более эффективен. Вы также можете выбрать много столбцов, например: "select id, email from users".
0

* является наименее эффективным, если вы хотите только email потому что вы возвращаете каждое значение столбца.

Вы также должны параметризовать свой запрос.

$query = "SELECT email FROM users WHERE username= ? ";

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню