Лучше всего использовать * при вызове большого количества полей в mysql?

Я знаю, что всегда лучше выполнять построение mysql-запросов, чтобы назвать каждый элемент, который вам нужен, но, например, на странице профиля мне может понадобиться каждый элемент, за исключением нескольких.

    SELECT user_name,f_name,l_name,country,usa_state,other_state,zip_code,city,gender,birth_date,date_created,date_last_visit, 
user_role,photo_url,user_status,friend_count,comment_count,forum_post_count,referral_count,referral_count_total, 
setting_public_profile,setting_online,profile_purpose,profile_height,profile_body_type,profile_ethnicity, profile_occupation,profile_marital_status,profile_sex_orientation,profile_home_town,profile_religion, 
profile_smoker,profile_drinker,profile_kids,profile_education,profile_income,profile_headline,profile_about_me, 
profile_like_to_meet,profile_interest,profile_music,profile_television,profile_books,profile_heroes,profile_here_for,profile_counter FROM users WHERE user_id=1 AND user_role >

Итак, не выполняя кучу тестов, может быть, кто-то с большим опытом может услышать некоторые советы?

Это будет хуже

SELECT * FROM users WHERE user_id=1 AND user_role >

Я предпочитаю перечислить все элементы, потому что тогда на этой странице просто просто посмотреть, что у меня есть для меня, если мне нужно что-то из БД, но если бы это было быстрее, я бы не перечислил их

Ответ 1

Примечание: присвоение имен всем полям, конечно, является лучшей практикой, но в этом посте я буду обсуждать только преимущества производительности, а не дизайн или обслуживание.


Синтаксис * может быть медленнее по следующим причинам:

  • Не все поля индексируются, и запрос использует полное сканирование таблицы. Вероятно, не ваш случай: вряд ли возможно, что все поля, которые вы возвращаете, индексируются одним индексом.

  • Возвращение завершающих полей из таблицы, содержащей столбцы с переменной длиной, может привести к небольшим искажениям: вернуть поле 20th, предыдущий 19 должен быть рассмотрен и вычислен расчеты.

  • Необходимо вернуть только несколько данных (переданных по соединению).

Поскольку вам нужны почти все поля, последняя причина, вероятно, самая важная. Скажем, поле description TEXT может быть только 1 полей 50, не используемых на странице, но может занимать 10 раз столько же пространства, сколько и все остальные поля вместе.

В этом случае, конечно, лучше назвать все поля и опустить длинные поля, которые вам не нужны.

Ответ 2

При рассмотрении использования * вы всегда должны учитывать возможность добавления в таблицу большего количества полей.

Если у вас много полей, вы можете получить и вернуть больше данных, чем вам нужно.

У вас может возникнуть проблема с некоторыми из новых полей. Например, если вы просто просматриваете поля и отображаете их, у вас могут появляться новые поля, которые вы не хотите отображать. Или для типа данных может потребоваться некоторое форматирование.

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

Ответ 3

Вы всегда должны указывать нужные столбцы, если ваш язык программирования не поддерживает ассоциативные списки/массивы, чтобы имена могли быть восстановлены по имени.

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