它会在网站页面加载时产生明显的差异吗?平均而言,我的表有10列,如果我只需要其中3列,我是否应该在查询中调用它们以使其更快?
答案 0 :(得分:8)
是否会产生可辨别的差异。可能不是在大多数情况下。以下是一些可能产生重大影响的案例:
但是,还有其他原因不使用*
:
答案 1 :(得分:2)
是的,如果您只需要一些列,只选择那些。以下是一些原因:
select *
将需要对主要内容中的其余数据字段进行后续点查找表而不仅仅是使用索引表中的数据。答案 2 :(得分:2)
假设您有一个包含1000列的表,而您只需要3列。
您认为什么会跑得更快?为什么?
这:SELECT * FROM table_name;
或者:SELECT col1, col2, col3, FROM table_name;
当您使用*
时,您现在正在内存中保留整个选择(大或小)。选择越大......它将要使用/需要的内存越多。
因此,即使您的表格不一定很大,我仍然只会选择您实际需要的数据。你甚至可能没有注意到速度的差异,但它肯定会更快。
答案 3 :(得分:1)
是的,你应该。
在select中使用命名列是使用数据库的最佳做法,原因有很多。
只有所需的数据才能从数据库传输到应用服务器,从而减少CPU,内存和磁盘的使用。
它有助于检测编码错误和结构变化。
使用select *时只有少数情况是个好主意,在所有其他查询中帮自己一个忙,并使用列名。
答案 4 :(得分:0)
缺点是肯定的,如果要返回更多数据,则需要更长时间。这可能是非常非常非常短的时间,但是它需要更长的时间。如上所述,select *在您可能不是设计/实现数据库的生产环境中可能是危险的。如果您假定按特定顺序返回列,或者数据库结构属于特定类型,然后DBA进入并进行某种更改而不通知您,则可能是您的代码存在问题。
答案 5 :(得分:0)
差异非常小,但存在细微差别,我认为这实际上取决于几个因素更快。
1)表格中有多少列?
2)您实际需要抓多少列?
3)你抓了多少条记录?
在你的情况下,根据你所说的有10列并且只需要其中3列的内容,我怀疑如果你使用'Select *'
,它会有所作为,除非你是&#39 ;抓住成千上万的记录。但是在涉及更多列的更极端的情况下,我发现'Select *'
略快一些,但在所有情况下都可能不是这样。
我曾经在一个包含超过150列的SQLite表中进行过一些速度测试,我只需要抓取大约40列,而且我需要所有20,000多条记录。速度差异非常小(我们说的是20到40毫秒之间的差异),但实际上从'SELECT ALL *'
的所有列中获取数据实际上更快,而不是'Select All Field1, Field2, etc'
。
我假设你的表中记录和列越多,这个例子的速度差就越大。但如果你只需要在一张巨大的表格中只需要3列,我猜想只抓住这3列会更快。
但最重要的是,如果您真的关心'Select *'
和'Select field1, field2, etc'
之间的最小速度差异,那么请进行一些速度测试。
答案 6 :(得分:0)
肯定是的。 *将替换为所有列名称。之后只执行开始。例如,如果表中有3列a,b,c,则选择a,b,c直接开始执行,其中select *开始将查询转换为select a,b,c之后仅执行统计数据。