2013-06-22 6 views
1

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

$sql = mysqli_query($con,"SELECT * FROM users LIMIT 50"); 

или так:

$sql = mysqli_query($con,"SELECT id, name, username, password FROM users LIMIT 50"); 

для этого кода:

while($me = mysqli_fetch_array($sql)){ 
$id = $me['id']; 
$name = $me['name']; 
$user = $me['username']; 
$pass = $me['password']; 
} 

Is один лучше другого. Еще одна тонко настроенная, другая. Или они оба одинаковы по производительности.

+0

Что мешает вам делать некоторые тесты? –

+0

Оба будут работать, если предположить, что существуют поля, но документально подтвержденная практика - последняя. – MrVimes

+0

@u_mulder Я не могу сказать, что серверу sql нравится больше всего – user2067005

ответ

2

Нет никакой разницы в производительности вообще. Однако я рекомендую явно указывать столбцы, которые вы хотите выбрать в производственном коде. Если вы добавите столбец в таблицу, это может повлиять на запрос. Также понятно любому, кто поддерживает код, что делает запрос, и какие значения необходимы.

Фактически, использование SELECT * менее эффективно, потому что MySQL будет искать имена столбцов, и это менее эффективно с точки зрения памяти, потому что конструкции, созданные PHP, будут иметь больше значений, чем используются (возможно), которые стоят больше памяти. Тем не менее, я думаю, что это пренебрежимо мало для моего комментария «без разницы».

+0

Спасибо, именно то, что я ищу, примет ответ, когда смогу. – user2067005

1

Я не знаю о производительности, но при выполнении объединений это может привести к неприятностям, если у вас одинаковый столбец в нескольких таблицах. В этом случае вам нужен псевдоним вручную, который, как правило, требует перечисления всех столбцов. Учитывая, что я предпочитаю оставаться последовательным, и, поскольку Explosion Pills упоминает, что его легче сказать, что происходит/поддерживать, чем использовать *.

0

Никогда не используйте *, чтобы возвращать все столбцы в таблице - это лениво. Вам нужно только извлечь нужные данные. Даже если вам требуется каждое поле, ваши таблицы неизбежно изменятся.

Фор более подробно см this

+0

ДА! И если вы используете *, изменение таблицы не повредит. Хотя с явно заданными именами полей это может привести к сбою –

+0

да, вы правы –

Смежные вопросы