SQL-select字段和select *的区别
select 表中所有字段 和 select * 相比,性能上有什么区别呢?普遍都说前者性能高,但是具体的原因是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
select 表中所有字段 和 select * 相比,性能上有什么区别呢?普遍都说前者性能高,但是具体的原因是什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
算法上的解析对性能没有太大影响,主要还是存储的性能
如果一张表有20个字段,select *取全部数据,select field1,field2只取2个字段,如果有10万条数据可以查询出来,那么对存储的操作差异就非常大,除非数据都在内存里面
所以select * 和select20个字段名性能上是没有什么差异的,主要是select具体字段的时候可以按需取字段,减少对数据库从硬盘读取数据的次数。
我理解, select * 在解析sql时有一个 查询表的字段 重新拼接sql的过程, 如:
mysql> explain extended select * from x;
...
mysql> show warnings;
+-------+------+--------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------+
| Note | 1003 | select `test1`.`x`.`id` AS `id` from `test1`.`x` |
+-------+------+--------------------------------------------------+
1 row in set (0.00 sec)
可以看到实际上 最终执行的sql里, 字段名已经包含了.
如果不是返回全部,那么区别在于传输的数据大小,数据的大小影响到响应的时间
如果请求少,数据量小时无所谓,反之则影响很大
select field1,field2,…… 在查询的时候,直接就可以进行匹配查找数据,而select ,它需要把号展开,解析成表中的所有字段,然后再做查询,多了一步操作,所以,它的性能不如select field1,field2,……这种形式的。