select count(*) from tablename

select count(a) from tablename
哪个快?为什么select a,b,c 快?

解决方案 »

  1.   

    统计结果应该是不一样的。我也认为 select * from tablename 要快!
      

  2.   

    为什么select a,b,c 快?
      

  3.   

    如果你是用的oracle 数据库
    可以用命令:
    set timing on 
    开启时间统计测试结果
    select a,b,c  from tablename 

      

  4.   

    select count(*) from tablename

    select count(a) from tablename
    哪个快?
      

  5.   

    一样
    如果你用oracle的话
    select count(a) from tablename

      

  6.   

    一般说来,是SELECCT A,B,C FROM TABLENAME 快。
      

  7.   

    select count(*)和select count(a)概念是不一样的,前者是取表中的纪录总数,而后者是取表中A字段不为NULL的纪录数. 虽然A可能是NOT NULL的,但是概念还是不一样的.另外,SELECT *这样的写法用户调试或者维护是可以的,但是在程序代码中不应该这么写.否则修改数据结构或者程序会变得非常讨厌.
      

  8.   

    从数据库查询优化角度来说,select *需要选出全部的列写入一个中间结果集中,用于进一步查询,或者输出,所以其数据量(100列)远大于select a,b,c地情况。
    我们课上刚学过。
      

  9.   

    具体最好选你需要的列,没必要的不要,造成前端的浪费select a,b,c from.....
      

  10.   

    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 zeroselect * is easy to use!
      

  11.   

    select * from table 的过程是这样的,先从table定位,然后再根据select 部分选择字段,这样,你就可以知道那个快了吧?
      

  12.   

    从oracle的api(oci)来讲,对select语句进行分析
    select *
    需要OCIDescribeAny()取得列名,列数,然后再取得数据类型名,数据类型,数值范围...
    select a,b,c...
    只需要取得数据类型名,数据类型,数值范围...相比较而言select *多了几步,所以select a,b,c比较快,但只是如(freeman12345)所言a little faster 
    而chooser所说的不完全正确
    两者都需要写入一个中间结果集中,只是select * 多用到了一些变量而已
      

  13.   

    当然是select*快啦!如果用select a,b 的话是进行查找比较字段,而直接用*表示全部,可以省去许多步骤!
      

  14.   

    还是说点实际的东西吧,我的一个表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)
      

  15.   

    select count(*) 比select count(a)快
      

  16.   

    select * from ss_sales_record 耗时306.741s
    select note_id,filiale_id from ss_sales_record 耗时532.898s网络传输怎样,是否同时执行其他sql
      

  17.   

    其实,我测试了一下,如果包括的网络情况,结果往往不准确。
    我想一般的select语句都不会这么简单,只是select *就可以拉,
    那么,以后写完的程序后,直接拿去测试下,看时间满意否,就可以拉。
      

  18.   

    我试一了一下,是select * from 快
      

  19.   

    我觉得测试的环境应该包括以下方面
    1.在oracle服务器主机运行
    2。服务器不处理任何事务
      

  20.   

    to zzzsssccc:
    对于一般问题不过是变量多少问题,但是对于数据库,就是数据量的问题了。
    我的切身体会中,最典型的就是一个表中有一个备注字段400字节,如果select了,那么大数据量访问速度立刻减低,因为数据量大,大部分情况会导致磁盘操作,假设数据有100万条,那么就多了400M的数据写+读的存取时间。当然如果被排除在外的字段大小很小,则这一因素的影响会小很多。
    这个问题我们上数据库查询优化理论时特别说过的。
      

  21.   

    行,我再去服务器试试!
    结论另人惊讶了!
    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
    对于上次作出的结果表示谦意!
    欢迎不同声音!!!
      

  22.   

    我想是select a,b,c 快了,只有选取三个列数据,总比取大于1000列的数据快吧
      

  23.   

    to chooser:
      这里是数据库论坛,数据量当然是主要而且重要问题。但我是比较数据量相同的情况,主要是比较执行过程的区别,既然你学过各种理论,应该知道select * 和select a,b,c... 的区别
      

  24.   

    select * from tablename
      

  25.   

    按照数据库优化的原则是不建议用select * 的,好几本书上都这样写。
    但是可能有其他原因的影响。
    例如你经常查询的结果可能服务器已经放入内存中,这样就影响了测试的结果。还有where条件的影响等等。
    不对之处请各位指正。
      

  26.   

    你的意思是....
    将全部字段列在select中?即select a,b,c,d........与select *进行效率比较?
    这时返回的数据其实完全一样,也只有这种情况下“数据量相同”,其它情况下数据量肯定不同。
    如果是这样,我绝对不会用select a,b,c,d...的,即使其效率再高^_^