当前位置: 首页 > news >正文

为什么不要轻易使用SELECT *?

🌱 起因:我写的第一个学生管理系统

最近在学习 C# WinForms,做了一个简单的“学生信息管理系统”,功能就是增删改查。数据库用的是 SQL Server,表结构如下:

CREATE TABLE Students (Id INT IDENTITY(1,1) PRIMARY KEY,Name NVARCHAR(50) NOT NULL,Age INT,Email NVARCHAR(100)
);

一开始,我查询数据时图省事,直接写了:

string sql = "SELECT * FROM Students";
dataGridView1.DataSource = SQLHelper.Query(sql);

程序跑得挺快,数据也显示正常。心想:“SELECT * 真方便,不用写字段名!”


⚠️ 转折:老师说“别用 SELECT *”

后来在看教程时,发现很多老师都强调:

“不要在生产代码中使用 SELECT *!”

我一开始不理解:明明能用,为什么不让用?难道只是“代码规范”?

直到我做了个小实验……


🔍 实验:SELECT *SELECT Id, Name... 有啥区别?

我往 Students 表里插入了 1 万条测试数据(用脚本生成),然后分别测试两种写法:

✅ 写法1:明确指定字段

string sql = "SELECT Id, Name, Age, Email FROM Students";

❌ 写法2:偷懒用 SELECT *

string sql = "SELECT * FROM Students";

📊 结果对比(本地 SQL Server Express)

指标 SELECT * 明确字段
查询耗时 ~850 ms ~220 ms
内存占用(WinForms) 高(DataGridView 卡顿) 低(流畅)
网络传输量

💡 虽然只有 4 个字段,但 SELECT * 仍然慢了近 4 倍!


🤔 为什么 SELECT * 会变慢?

通过查资料,我总结了几个原因:

1. 传了“不需要的数据”

  • 我的 DataGridView 只显示 NameAge,但 SELECT *IdEmail 也传过来了。
  • 多余的数据 = 多余的网络传输 + 多余的内存占用。

2. 数据库没法“走捷径”

  • SQL Server 可以为常用查询建“索引”(就像书的目录)。
  • 如果你只查 NameAge,数据库可以建一个“覆盖索引”,直接返回结果,不用翻整张表。
  • SELECT * 要所有字段,索引帮不上忙,只能老老实实查整行 → 变慢

3. 未来可能“埋雷”

  • 假如以后表里加了一个 Photo VARBINARY(MAX) 字段(存照片)。
  • 那么 SELECT * 会把每张照片都传过来!程序直接卡死。
  • 而明确写字段的代码完全不受影响。

✅ 正确做法:明确列出你需要的字段

现在我的代码都改成这样了:

// 只查 DataGridView 需要的字段
string sql = "SELECT Id, Name, Age, Email FROM Students ORDER BY Id";
dataGridView1.DataSource = SQLHelper.Query(sql);

虽然多打几个字,但换来的是:

  • 更快的速度
  • 更低的资源占用
  • 更强的可维护性

🧭 给初学者的建议

  1. 开发阶段可以用 SELECT * 快速调试,但正式代码一定要写明字段
  2. 只查你需要的字段,不要“贪多”。
  3. 养成好习惯:写 SQL 前先想清楚“我到底要什么数据?”
  4. 如果表字段很多,可以在 SQL Server Management Studio (SSMS) 里右键表 → “脚本表作为” → “SELECT 到” → “新查询编辑器窗口”,自动生成字段列表。
http://www.jsqmd.com/news/26523/

相关文章:

  • 大模型结构化输出json, 最新方法更方便
  • 2025 年醋酸钠厂家最新推荐榜,覆盖无水 / 三水 / 液体多类型,技术实力与市场口碑深度解析液体醋酸钠/碳源醋酸钠/结晶醋酸钠/工业醋酸钠公司推荐
  • 2025年比较好的智能触摸一体机厂家推荐及采购指南
  • 2025 年自动抛光机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析水龙头/门执手/锌合金/铝合金自动抛光机/打磨机器人抛光去毛刺公司推荐
  • 2025 年地膜厂家最新推荐榜,聚焦企业综合实力与市场口碑深度解析降解地膜/银色地膜/双色地膜/全生物降解地膜/银黑双面地膜公司推荐
  • 2025年知名的高压无功补偿柜最新TOP厂家排名
  • docker /overlay2/xxx/merged 爆满
  • 2025 年打磨机器人厂家最新推荐榜,技术实力与市场口碑深度解析,涵盖多领域适配方案摩托车配件打磨机器人/汽车配件打磨机器人公司推荐
  • 机器学习之Boosting算法
  • 2025年热门的高定衣柜灯厂家推荐及选择指南
  • 完整教程:C语言自学--自定义类型:联合和枚举
  • 微信小程序中的H5网页在关怀模式下页面排版变乱的解决办法
  • 2025年比较好的opp束带母卷热门厂家推荐榜单
  • 详细介绍:WSL 提速配置 checklist
  • 2025年11月GEO(AI搜索优化)品牌源头厂家推荐排行榜:AI驱动营销新纪元的领航者
  • 2025 年钢桶厂家最新推荐榜,技术实力与市场口碑深度解析,筛选优质品牌助力企业采购304 不锈/实验室不锈/镀锌/烤漆/PVF 内涂钢桶公司推荐
  • [JXCSP-S-S2019 江西] 多叉堆
  • 2025 年吨桶源头厂家最新推荐榜,技术实力与市场口碑深度解析,甄选优质生产企业叉车专用吨桶/热镀锌外框吨桶公司推荐
  • 2025年知名的来力台球桌厂家最新TOP实力排行
  • 2025年热门的大冰花钛杯最新TOP厂家排名
  • 2025 年磨床厂家最新推荐榜,涵盖数控内圆 / 复合 / 立式等类型,技术实力与市场口碑深度解析立式内圆/立式外圆/主轴/深孔内圆磨床公司推荐
  • 【金融行业案例】借助DHTMLX打造高效银行排班与管理系统
  • PHY6252低成本BLE5.2智能灯控智能家居蓝牙透传芯片模块 - 动能世纪
  • 2025 年青铜厂家最新推荐榜,技术实力与市场口碑深度解析,筛选优质供应商助力企业采购铍青铜/镉青铜/铬青铜/磷青铜/硅青铜/锡铅青铜公司推荐
  • ngnix使用try_files命令进行history路由的适配
  • 【工业检测行业案例】借助TeeChart打造高精度材料强度可视化测试系统
  • 2025年质量好的化工厂清淤机器人厂家最新权威实力榜
  • 英语从句三大类
  • 2025年评价高的网眼布厂家最新TOP排行榜
  • 27