表: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;
这样在效率上有区别吗?
或者两者有什么不同
请问:
select * from user;
select id,name,pwd,sex,age,type,field1,field2,field3,field4,field5 from user;
这样在效率上有区别吗?
或者两者有什么不同
设想下,你就知道结果了一般来说,如果栏位不多,而我们要查找全部栏位,我们尽量全部写在select后
select t。
效率会高点
但是也有特例 说是 select count(*) 比 select count(1) 效率更高
*的效率相当低,数据库拿到*后要先通过数据字典把*解析为一个一个的字段然后才进入语句执行。
不要通过这个省事儿,这个只会让以后的开发,sql优化更棘手。
有区别但是不太严重
或者两者有什么不同
select * 这种先通过查询字典表把所有字段枚举出来然后再查询。而 select 字段1,字段2,....这样就省了这个步骤了。
比如这个语句
insert into table2
select * from table1;只要table1或table2的表结构花生变化,比如增加或删除、或改变了字段顺序,都将引发错误
select id,name,pwd,sex,age,type,field1,field2,field3,field4,field5 from user;
前一个的效率一定低于后一个效率。
select语句中避免使用"*"
在select子句查询表的所有列时,可以使用动态SQL列引用"*",用来表示表中所有的列.使用"*"替代所有的列,可以降低编写SQL语句的难度,减少SQL语句的复杂性,但是却降低了SQL语句执行的效率.
当一条SQL语句从客户端进程传递到服务器端进程后,Oracle需要执行如下步骤:
1)在共享池中搜索SQL语句是否已经存在
2)验证SQL语句的语法是否准确
3)执行数据字典来验证表和列的定义
4)获取对象的分析锁,以便在语句的分析过程中对象的定义不会改变
5)检查用户是否具有相应的操作权限
6)确定语句最佳执行计划
7)将语句和执行方案保存到共享的SQL区