select * 和select a,b,c 哪个执行效率更快

三杯倒 2002-10-25 03:11:35
加精
select * 和select a,b,c执行效率差不多少

如果表的列很多 大于100列或者更多呢?
...全文
2790 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
三杯倒 2002-11-01
  • 打赏
  • 举报
回复
to chooser:
这里是数据库论坛,数据量当然是主要而且重要问题。

但我是比较数据量相同的情况,主要是比较执行过程的区别,既然你学过各种理论,应该知道select * 和select a,b,c... 的区别
shileilei110 2002-11-01
  • 打赏
  • 举报
回复
我想是select a,b,c 快了,只有选取三个列数据,总比取大于1000列的数据快吧
chooser 2002-11-01
  • 打赏
  • 举报
回复
你的意思是....
将全部字段列在select中?即select a,b,c,d........与select *进行效率比较?
这时返回的数据其实完全一样,也只有这种情况下“数据量相同”,其它情况下数据量肯定不同。
如果是这样,我绝对不会用select a,b,c,d...的,即使其效率再高^_^
hlooo 2002-11-01
  • 打赏
  • 举报
回复
按照数据库优化的原则是不建议用select * 的,好几本书上都这样写。
但是可能有其他原因的影响。
例如你经常查询的结果可能服务器已经放入内存中,这样就影响了测试的结果。还有where条件的影响等等。
不对之处请各位指正。
BlueChina 2002-11-01
  • 打赏
  • 举报
回复
select * from tablename
三杯倒 2002-10-31
  • 打赏
  • 举报
回复
我觉得测试的环境应该包括以下方面
1.在oracle服务器主机运行
2。服务器不处理任何事务
zls0303 2002-10-31
  • 打赏
  • 举报
回复
我试一了一下,是select * from 快
HOI 2002-10-31
  • 打赏
  • 举报
回复
其实,我测试了一下,如果包括的网络情况,结果往往不准确。
我想一般的select语句都不会这么简单,只是select *就可以拉,
那么,以后写完的程序后,直接拿去测试下,看时间满意否,就可以拉。

三杯倒 2002-10-31
  • 打赏
  • 举报
回复
select * from ss_sales_record 耗时306.741s
select note_id,filiale_id from ss_sales_record 耗时532.898s

网络传输怎样,是否同时执行其他sql
langlang_2000 2002-10-31
  • 打赏
  • 举报
回复
行,我再去服务器试试!
结论另人惊讶了!
ss_sales_record (共24524条记录)
select * from ss_sales_record 耗时591.28S
select note_id,filiale_id from ss_sales_record 耗时69.28s
我这是从主机端进行测试的,不对请指正
还有对于表中如含有大型数据对象,这个没有试过,请赐教!
select count(*) from ss_sales_record 耗时0.15s
select count(note_id) from ss_sales_record 耗时0.16s
对于上次作出的结果表示谦意!
欢迎不同声音!!!
chooser 2002-10-31
  • 打赏
  • 举报
回复
to zzzsssccc:
对于一般问题不过是变量多少问题,但是对于数据库,就是数据量的问题了。
我的切身体会中,最典型的就是一个表中有一个备注字段400字节,如果select了,那么大数据量访问速度立刻减低,因为数据量大,大部分情况会导致磁盘操作,假设数据有100万条,那么就多了400M的数据写+读的存取时间。

当然如果被排除在外的字段大小很小,则这一因素的影响会小很多。
这个问题我们上数据库查询优化理论时特别说过的。
chanet 2002-10-30
  • 打赏
  • 举报
回复
当然是select*快啦!

如果用select a,b 的话是进行查找比较字段,而直接用*表示全部,可以省去许多步骤!
jiezhi 2002-10-30
  • 打赏
  • 举报
回复
select count(*) 比select count(a)快
langlang_2000 2002-10-30
  • 打赏
  • 举报
回复
还是说点实际的东西吧,我的一个表ss_sales_record (共24524条记录)
select * from ss_sales_record 耗时306.741s
select note_id,filiale_id from ss_sales_record 耗时532.898s
我这是从客户端进行测试的,不对请指正
还有对于表中如含有大型数据对象,这个没有试过,请赐教!
select count(*) from ss_sales_record 耗时0.16s
select count(note_id) from ss_sales_record 耗时0.16s

表结构如下:
FieldName Type
NOTE_ID VARCHAR2(12)
FILIALE_ID VARCHAR2(4)
MARKET_ID VARCHAR2(6)
USER_ID VARCHAR2(10)
PRODUCE_ID VARCHAR2(4)
TYPE_ID VARCHAR2(4)
PRODUCT_ID VARCHAR2(5)
PRODUCT_COLOR VARCHAR2(20)
SALE_QUANTITY NUMBER(10)
SALE_PRICE NUMBER(10,2)
SALE_GENERAL_QUANTITY NUMBER(10)
SALE_GENERAL_PRICE NUMBER(10,2)
SALE_SPECIAL_QUANTITY NUMBER(10)
SALE_SPECIAL_PRICE NUMBER(10,2)
START_DATE DATE
END_DATE DATE
INPUT_DATE DATE
USER_ID1 VARCHAR2(10)
DEL_FLAG VARCHAR2(1)
三杯倒 2002-10-28
  • 打赏
  • 举报
回复
从oracle的api(oci)来讲,对select语句进行分析
select *
需要OCIDescribeAny()取得列名,列数,然后再取得数据类型名,数据类型,数值范围...
select a,b,c...
只需要取得数据类型名,数据类型,数值范围...

相比较而言select *多了几步,所以select a,b,c比较快,但只是如(freeman12345)所言a little faster


而chooser所说的不完全正确
两者都需要写入一个中间结果集中,只是select * 多用到了一些变量而已
rltan 2002-10-28
  • 打赏
  • 举报
回复
select * from table 的过程是这样的,先从table定位,然后再根据select 部分选择字段,这样,你就可以知道那个快了吧?
freeman12345 2002-10-28
  • 打赏
  • 举报
回复
I think select a,b,c... is a little faster then select *
because select * clause must be compiled into select a,b,c...
this process may cause a little time,although approaching zero

select * is easy to use!
beckhambobo 2002-10-26
  • 打赏
  • 举报
回复
具体最好选你需要的列,没必要的不要,造成前端的浪费

select a,b,c from.....
chooser 2002-10-25
  • 打赏
  • 举报
回复
从数据库查询优化角度来说,select *需要选出全部的列写入一个中间结果集中,用于进一步查询,或者输出,所以其数据量(100列)远大于select a,b,c地情况。
我们课上刚学过。
KingSunSha 2002-10-25
  • 打赏
  • 举报
回复
select count(*)和select count(a)概念是不一样的,前者是取表中的纪录总数,而后者是取表中A字段不为NULL的纪录数. 虽然A可能是NOT NULL的,但是概念还是不一样的.

另外,SELECT *这样的写法用户调试或者维护是可以的,但是在程序代码中不应该这么写.否则修改数据结构或者程序会变得非常讨厌.
加载更多回复(9)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧