Select * 与 Select 某几个字段,性能上有差异吗?

来源:互联网 发布:java poi svg 编辑:程序博客网 时间:2024/05/23 16:56

select语句的耗时主要在where条件,数据库表规模、是否建立索引、查询条件的复杂性上,这些点也是优化的重点。

普通情况下SELECT * 与 限制字段速度上没有差别,特殊情况下也许有差别,比如有一个超大长度的字段可能造成socket传输的压力。


MYSQL数据库的情况(简单情况测试):

表记录数41,547,002,即4000w行 

使用远程客户端取1000条数据,统计时间:

Sql代码  收藏代码
  1. SELECT * FROM `dmsp`.`dmsp_dimension_content` LIMIT 0, 1000;  
时间2.218s,网络消耗0.547s 
Sql代码  收藏代码
  1. SELECT `id`, `appid`, `aop`, `t`, `uid`, `sid`, `pid`, `pname`, `bid`, `bname`, `ptype`, `sm`, `sv`, `bt`, `national`, `area`, `ov` FROM `dmsp`.`dmsp_dimension_content` LIMIT 0, 1000;  
取出所有字段,时间2.250s,网络消耗0.578s 
多次查询(改变limit条件避免缓存),时间变化不大。 

结论:两者差别几乎可忽略。所以查询所有字段(或者大多数字段)的时候,大可select *来操作。如果某些不需要的字段数据量特别大,还是写清楚字段比较好,因为这样可以减少网络传输



0 0