表:user 字段:id,name,pwd,sex,age,type,field1,field2,field3,field4,field5
请问:
select * from user;
select id,name,pwd,sex,age,type,field1,field2,field3,field4,field5 from user;
这样在效率上有区别吗?
或者两者有什么不同

解决方案 »

  1. 错!因为你写select * from table ,在Oracle中,首先会解析你*,将它全部写成select col1,col2,col3......from table
    设想下,你就知道结果了一般来说,如果栏位不多,而我们要查找全部栏位,我们尽量全部写在select后
      

  2. select * 据说会效率低点,
    select t。
    效率会高点
    但是也有特例 说是 select count(*) 比 select count(1) 效率更高
      

  3. select * 效率相对低一些!
      

  4. 千万不要用*,小点的数据库看不出来,但是数据库大的话就很明显了,这可是个话习惯呀
    *的效率相当低,数据库拿到*后要先通过数据字典把*解析为一个一个的字段然后才进入语句执行。
    不要通过这个省事儿,这个只会让以后的开发,sql优化更棘手。
      

  5. 这样在效率上有区别吗? 
    有区别但是不太严重
    或者两者有什么不同
    select * 这种先通过查询字典表把所有字段枚举出来然后再查询。而 select 字段1,字段2,....这样就省了这个步骤了。
      

  6. 解析上花的时间可以忽略不计,但是在正式应用中这么写,可能会有潜在危险
    比如这个语句
    insert into table2
    select * from table1;只要table1或table2的表结构花生变化,比如增加或删除、或改变了字段顺序,都将引发错误
      

  7. select * from user;
    select id,name,pwd,sex,age,type,field1,field2,field3,field4,field5 from user;
    前一个的效率一定低于后一个效率。
      

  8. 查询表有哪些字段还是用DESC 比较好吧~~
      

  9. 一点拙见:
    select语句中避免使用"*"
    在select子句查询表的所有列时,可以使用动态SQL列引用"*",用来表示表中所有的列.使用"*"替代所有的列,可以降低编写SQL语句的难度,减少SQL语句的复杂性,但是却降低了SQL语句执行的效率.
    当一条SQL语句从客户端进程传递到服务器端进程后,Oracle需要执行如下步骤:
    1)在共享池中搜索SQL语句是否已经存在
    2)验证SQL语句的语法是否准确
    3)执行数据字典来验证表和列的定义
    4)获取对象的分析锁,以便在语句的分析过程中对象的定义不会改变
    5)检查用户是否具有相应的操作权限
    6)确定语句最佳执行计划
    7)将语句和执行方案保存到共享的SQL区
      

类似问题 »