回答
SELECT字段比选择*更快。
因为如果你在你的表有超过1场/列,然后选择*将返回所有这些的,这需要网络带宽和更多的数据库工作,以获取所有其他领域。但是如果您只需要一个字段/列,数据库负载就会减少,并且不需要传输不需要的信息,从而不必要地占用带宽资源。
我会赞成你,但我认为你没有真正回答这个问题。他试图避免做出假设并接受罐头智慧。我认为他想看基准数字;我也做。这可以解释为什么他还没有接受你的答案,尽管所有的赞扬。 – 2010-11-18 14:57:13
在对同样的问题的另一个答案中提出了其他几个好处,我认为这个问题罐头智慧是正确的。我能想到的唯一好处是如果你懒惰,不想写出所有的列......对于基准测试,您可以像在另一个线程中提到的那样,自己尝试一下,直到数据库的命令出现为止。 – rapadura 2010-11-18 23:36:13
我没有足够大的数据集来衡量差异。我可以伪造一些数据并衡量它,但是我刚刚测量了fakery。我正在监测这个问题,看看是否有人会在实际系统上测量实际数据时提出明确的答案。 *我可以从中学到一些东西。我已经读过罐头的智慧。现在告诉我一些我不知道的事情。 – 2010-11-19 00:19:56
Select *
据说比select <field list>
慢,因为*需要额外的查找来获取所有列。
此外,如果该表包含更多列(您不感兴趣),为什么只让他们忽略它们?
既然你提到mysql,我只是测试“SELECT字段”是更快的。你为什么不自己测试一下呢?
在Linux上:
time (echo "SELECT * FROM table" | mysql -u username --password=passwd database > /dev/null)
time (echo "SELECT field FROM table" | mysql -u username --password=passwd database > /dev/null)
SELECT * 将检索这可能是非常大的,特别是如果你有斑点的所有列。 黄金法则是选择你需要的字段。
除了@ AntionoP的回答,使用SELECT field
的另一个好处是,如果字段被索引,MySQL可以直接从索引返回值,而无需查找数据行以获取结果。
直接来自索引的任何引用,而不需要查找数据行以获得结果。 – ajreal 2010-11-17 12:29:44
@ajreal - 这个链接引用了这个事实:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – 2010-11-17 20:19:06
如果您的查询有,这只是真实的(或有意义的)一个'WHERE'子句,并且匹配标准与索引具有相同的形式。也就是说,查询类似于'select field from table'或'select field where from field where'LIKE'foo%''需要一个完整的列扫描,所以查询索引列无关紧要。 – 2010-11-18 15:03:19
@littlegreen,完成!谢谢 :) – 2010-11-17 10:30:13
当嵌套查询使用SELECT *
,有时查询优化器会删除你不这样做的领域用于后续查询。所以在这种情况下,这并不重要。但是你相信MySQL的查询优化器吗?要确定SELECT *
是否将不必要的字段添加到查询计划中,唯一的方法是直接使用EXPLAIN (..query..)
输出它们来比较两个查询计划。
也就是说,最简单的方法是确实肯定是不会在生产查询中使用SELECT *
。
- 1. SELECT SUM as field
- 2. MySQL SELECT WHERE'a'IN(`field`)
- 3. Knockout select field error databind
- 4. SELECT ... ORDER BY field IN(SELECT ...)not working on duplicate field
- 5. Aggregate&count“SELECT .... AS [Name]”field?
- 6. Mysql Select case case and field comparison
- 7. Django,Select related,Average,ManyToMany field
- 8. Validation engine with message over select field
- 9. T-SQL select语句中[field] + 0的用途是什么?
- 10. 为什么如果($ row ['field'] == value)像SELECT WHERE field = value那样工作?
- 11. SELECT field as mytest WHERE mytest IS NULL - field“mytest”not found?
- 12. jQuery中的$ field是什么?
- 13. SQL Server“SELECT COUNT(field)FROM tblname”返回null
- 14. if field = 1 delete else update field =(field-1)
- 15. PHP select语句需要快速更正
- 16. {$ unset:{field:1}}中的含义是什么
- 17. Protobuf“field 1”的意义是什么?
- 18. GpsSatellite中field mValid的含义是什么?
- 19. 为什么在我的属性声明“[field:NonSerialized]”中需要“field:”?
- 20. 为什么Method访问看起来比Field访问更快?
- 21. 为什么SELECT MIN(CAST(`field` as SIGNED))将我的结果值四舍五入?
- 22. php-fpm slowlog first field是什么意思?
- 23. (jd)和(i,field)是什么意思?
- 24. SQL where field in vs. where field = with multiple or?
- 25. MySQL UPDATE table1 where table1.FIELD = table2.FIELD
- 26. SQL查询select中的列表其中field = value和otherfield = othervalue
- 27. 其中{table1.field} * = {table2.field}语法
- 28. PHP + UnixODBC + FreeTDS - SELECT [field] AS [name]不起作用
- 29. 如何制作select语句PDO并以$ row ['field']结尾
- 30. SELECT WHERE field!=值如何在mysql中完成?
可能的重复[什么原因不使用'select *'?](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select) – 2010-11-17 10:24:25