当前位置:  开发笔记 > 数据库 > 正文

Select*和Select [list each col]之间是否有区别

如何解决《Select*和Select[listeachcol]之间是否有区别》经验,为你挑选了6个好方法。

我正在使用MS SQL Server 2005.与SQL引擎之间有区别

SELECT * FROM MyTable;

SELECT ColA, ColB, ColC FROM MyTable;

当ColA,ColB和ColC代表表格中的每一列时?

如果它们是相同的,那么为什么你应该使用第二个呢?我有一个对LINQ很重的项目,我不确定它生成的标准SELECT*是不是很糟糕,或者我应该总是使用.Select()来指定我想要的cols.

编辑:更改"当ColA,ColB和ColC是表格的所有列?" "当ColA,ColB和ColC代表表格中的每一列?" 为清楚起见.



1> swilliams..:

一般来说,最好是明确的,所以Select col1, col2 from Table更好.原因是在某些时候,可能会向该表添加一个额外的列,并导致从查询中返回不需要的数据.

尽管如此,这不是一个硬性规定.


但在某些情况下,显式意味着您可能必须更改使用该表的每个代码,因为您*希望新列几乎无处可见.虽然你经常需要更改视图代码,但在这些情况下,只需使用`*`仍可将工作量减少一半.这一切都取决于你在做什么,以及你对未来的计划是什么.
在许多情况下,它还会导致依赖代码中断.在没有在INSERT语句上使用列列表的惰性开发人员的环境中尤其如此.

2> Josh..:

1)第二个更明确地返回哪些列.然后,第二个的值是您明确知道哪些列返回的值.

2)当列数多于明确使用的列数时,这可能会返回更少的数据.

3)如果通过添加新列更改表,则第一个查询将更改,而第二个查询不会更改.如果您的代码类似于"for all columns of do do ...",那么如果您使用的是第一个而不是第二个,则结果会发生变化.



3> stephenbayer..:

我会让很多人对我感到不满,但特别是如果我稍后再添加列,我通常喜欢使用SELECT*FROM表.因为这个原因,我被称为懒惰,因为如果我对表进行任何修改,我不想追踪使用该表的所有存储过程,只需在我的应用程序中的数据访问层类中进行更改.在某些情况下我会指定列,但在我试图从数据库中获取完整"对象"的情况下,我宁愿只使用"*".而且,是的,我知道人们会因此而讨厌我,但它让我在为我的应用程序添加字段时更快,更少无bug.



4> Jeff Paulsen..:

问题的两个方面是:显式列规范在添加新列时提供更好的性能,但*规范不需要维护,因为添加了新列.

使用哪个取决于您希望添加到表中的列类型,以及查询的重点.

如果您使用表作为对象的后备存储(似乎可能在LINQ-to-SQL情况下),您可能希望添加到此表中的任何新列都包含在您的对象中,反之亦然.你正在并行维护它们.因此,对于这种情况,SELECT子句中的*规范是正确的.显式规范会在每次更改时为您提供额外的维护,如果您没有正确更新字段列表,则会出现错误.

如果查询将返回大量记录,那么出于性能原因,最好使用明确的规范.

如果两者都是真的,请考虑使用两个不同的查询.



5> Mitch Wheat..:

您应该指定显式列列表.SELECT*将带回更多列,而不是创建更多IO和网络流量,但更重要的是,即使存在非群集覆盖索引(在SQL Server上),也可能需要额外的查找.



6> splattne..:

不使用第一个语句(select*)的一些原因是:

    如果您稍后向该表添加一些大字段(BLOB列将非常糟糕),则可能会在应用程序中遇到性能问题

    如果查询是包含两个或更多表的JOIN查询,则某些字段可能具有相同的名称.最好确保您的字段名称不同.

    从编程美学的角度来看,查询的目的更清晰

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有