我听说SELECT *在编写SQL命令时使用通常是不好的做法,因为它对SELECT您特别需要的列更有效.
如果我需要SELECT表中的每一列,我应该使用
SELECT * FROM TABLE
Run Code Online (Sandbox Code Playgroud)
要么
SELECT column1, colum2, column3, etc. FROM TABLE
Run Code Online (Sandbox Code Playgroud)
在这种情况下,效率真的重要吗?SELECT *如果你确实需要所有的数据,我认为内部会更优化,但我说的是没有真正了解数据库.
我很想知道在这种情况下最佳做法是什么.
更新:我可能应该指定我真正想要做的唯一情况SELECT *是当我从一个表中选择数据时我知道所有列总是需要被检索,即使添加了新列.
鉴于我所看到的反应,这仍然是一个坏主意,SELECT *永远不应该用于更多技术原因,我曾经考虑过.
我正在使用MS SQL Server 2005.与SQL引擎之间有区别
SELECT * FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
和
SELECT ColA, ColB, ColC FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
当ColA,ColB和ColC代表表格中的每一列时?
如果它们是相同的,那么为什么你应该使用第二个呢?我有一个对LINQ很重的项目,我不确定它生成的标准SELECT*是不是很糟糕,或者我应该总是使用.Select()来指定我想要的cols.
编辑:更改"当ColA,ColB和ColC是表格的所有列?" "当ColA,ColB和ColC代表表格中的每一列?" 为清楚起见.
这是我的表结构:
alt text http://img6.imageshack.us/img6/8730/articlek.jpg
错误消息是:
#1066 - 不是唯一的表/别名:'user'
以下是我的代码.
SELECT article.* , section.title, category.title, user.name, user.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
WHERE article.id = '1'
Run Code Online (Sandbox Code Playgroud) 为一篇冗长的帖子道歉,但我需要发布一些代码来说明问题.
灵感来自问题*什么是不使用选择的原因?,我决定指出一些我之前注意到的select*行为的观察结果.
让我们的代码说明一切:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[starTest]') AND type in (N'U'))
DROP TABLE [dbo].[starTest]
CREATE TABLE [dbo].[starTest](
[id] [int] IDENTITY(1,1) NOT NULL,
[A] [varchar](50) NULL,
[B] [varchar](50) NULL,
[C] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into dbo.starTest(a,b,c)
select 'a1','b1','c1'
union all select 'a2','b2','c2'
union all select 'a3','b3','c3'
go
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vStartest]'))
DROP VIEW [dbo].[vStartest]
go
create view dbo.vStartest as
select * from dbo.starTest …Run Code Online (Sandbox Code Playgroud)