以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  select * fro m与select 0 fro m的区别  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89818)

--  作者:李孝春
--  发布时间:2016/8/30 16:31:00
--  select * fro m与select 0 fro m的区别
select * fr om与select 0 fr om的区别
那一个写法运行的效率更高呢?

--  作者:Hyphen
--  发布时间:2016/8/30 16:58:00
--  
这2个玩意不是一回事吧。

select * fr om是返回所有字段

select 0 fr om是返回一列,值全部是0,列名称由数据库自动生成

--  作者:李孝春
--  发布时间:2016/8/30 17:04:00
--  回复:(Hyphen)这2个玩意不是一回事吧。select * fr...
你好  再麻烦你一下
如果我有一个表 有近二十个字段列 
我想根据姓名=张三  来查询这个表中的姓名等于张三的所有的字段值 
怎样操作才能确保查询的效率最佳呢?


--  作者:Hyphen
--  发布时间:2016/8/30 17:27:00
--  
DBA一般会告诉你,给姓名加上索引,sel ect后面加上需要的字段名称。

好几年前曾经有DBA分析过,列出字段比用*号的效率要高,少了一步解析的过程。只是不知道现在最新的数据库这方面的机制有没有改变。

另外一个可以观察到的现象就是在sqlserver创建视图的时候,视图会自动把*号更换为所有的字段名称。

--  作者:jspta
--  发布时间:2016/8/30 17:37:00
--  
以下是引用李孝春在2016/8/30 17:04:00的发言:
你好  再麻烦你一下
如果我有一个表 有近二十个字段列 
我想根据姓名=张三  来查询这个表中的姓名等于张三的所有的字段值 
怎样操作才能确保查询的效率最佳呢?

你这个需要历遍所有列?  你表设计有问题。
如果你非要这样,只能历遍你需要的列,写wh ere条件进行加载


--  作者:李孝春
--  发布时间:2016/8/31 9:45:00
--  回复:(jspta)以下是引用李孝春在2016/8/30 17:04:0...
select 0 f rom a where name=\'张三\'

表字段有NAME 性别 年龄  出生年月 身份证号码 居住地址 学历 学会  入党时间等字段

上面的写法可以查出name等于张三的所有字段列值么?

--  作者:有点蓝
--  发布时间:2016/8/31 10:08:00
--  
select NAME,性别 ,年龄 , 出生年月, 身份证号码 ,居住地址, 学历, 学会,  入党时间 f rom a where name=\'张三\'

select * f rom a where name=\'张三\'

--  作者:gtashiwo
--  发布时间:2016/8/31 16:42:00
--  

几年前看过一个文章,数据量大的时候SELECT 1 比SELECT *来的快,数据量小的时候SELECT *比SELECT 1来的快 


--  作者:有点蓝
--  发布时间:2016/8/31 17:42:00
--  
如果sql不变的话,数据库执行一次后会缓存这条sql的解析,所以一般同一条sql(oracle是大小写不一样当作是不同的sql)第二次执行就会比第一次快。

由于狐表不支持sql执行的参数模式,所以享受不到这点优势。我们习惯就是拼接sql,如果条件不一样,就已经是不同的sql了。