sql - 在mysql中调用很多字段时最好使用*?

标签 sql mysql database

我知道通常构建 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 >

我更喜欢列出所有项目,因为如果我需要数据库中的某些内容,那么在该页面上更容易查看我可以使用的内容,但如果它更快,那么我不会列出它们

最佳答案

注意:命名所有字段当然是最佳实践,但在这篇文章中,我将只讨论性能优势,而不是设计或维护方面的优势。


* 语法可能会因为以下原因而变慢:

  • 并非所有字段都被索引,查询使用全表扫描。可能不是您的情况:您返回的所有字段几乎都不可能使用单个索引进行索引。

  • 从包含可变长度列的表中返回尾随字段可能会导致轻微的搜索开销:要返回 20th 字段,应检查之前的 19 并计算出的偏移量。

  • 需要返回更多数据(通过连接传递)。

由于您几乎需要所有字段,因此最后一个原因可能是最重要的。比如说,description TEXT字段只能是50字段中的1,页面上没有用到,但可以占用10 空间是所有其他字段加起来的两倍。

在这种情况下,命名所有字段并省略不需要的长字段当然会更好。

关于sql - 在mysql中调用很多字段时最好使用*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960036/

相关文章:

SQL查找表中首次出现的数据集

sql - MySQL合并多行

php - MySQL获取从现在到去年一个月的记录

mysql - 加速通过 Select 语句循环的 SQL 更新语句

mysql - 将先前的值与 mysql 中的当前值相加

sql - 您会推荐哪些优化工作来加速 PostgreSQL 中的查询执行?

java - JDBC 准备语句 UTF-8

SQL 查询在单个列中搜索名字和姓氏的任何变体

SQL 错误 : Invalid identifier

database - '完整性错误 : column username is not unique' while using Django User model in test