比如
第一种表job23有字段user_1,user_2,user_3,user_4,user_5,user_6,user_7,user_8,user_9,user_10,user_11,user_12,user_13,user_14,user_15,user_16,user_17,user_18,user_19,user_20,user_21,user_22,user_23,user_24,user_25,user_26,user_27,user_28,user_29,user_30,user_31,user_32第二种表job23有字段user_1,user_2查询  $strsql="select  user_1,user_2 from $job23 where user_1='$cook' and user_2='$cook'";查询时只要查询字段user_1和user_2 
问:会不会因为第一种表的字段过多而影响查询速度或占用cpu和内存比较多 

解决方案 »

  1.   

    速度快慢和索引是否建立有关
    如果没有建立索引:
    会进行全表扫描,将符合条件的记录所在的数据页读取到缓存,并从每个数据页中把符合条件的记录读取出,此时,记录多,会占用更多I/O资源。
    MSSQL是以8k的数据页为单位存储数据,除去页头等,一般而言,一页上用来存存储数据的空间为8096byte。
    如果一条记录的字段少,也就意味着一条记录所占的存储空间下,一个数据页上能存储更多的记录数。同样是读取一个数据页,字段少的意味着记录数多,就更有效率。
    例如,user1,user2两个字段,都为nchar(10),那么,一条记录占40byte,读取一个数据页,可以获得202条记录;如果user1user10,,都为nchar(10),那么,一条记录占200byte,读取一个数据页,可以获得40条记录。那么,如果要获取要200条记录,前者(字段少)只需物理读取一次,而后者(字段多)需要读取5次。以上是在没有考虑到索引的情况下,如果都建立了索引,并都在user1,user2上建立索引,那么,此时,可以认为两表的查询速度是一样的(其实,还是字段少的读取速度快,但是和无索引相比,不是非常明显,可以忽略不计)
      

  2.   

    没有办法说清楚。
    查询语句执行,有两种。 
    1.表扫描:查询语句没有用到索引时, 也就是你的数据表全部的数据要 一页一页的扫描(一个数据页8KB有多行记录)。字段多,表相对就大一点。从硬盘读出的页数也多,影响的是内存和硬盘之间IO。
    2.索引扫描: 
    比如你的表用user_1做了索引。索引页(大小8kb)user_1列和指向实际数据页记录指针,字段少,所以扫描一个索引页,就可以相当原来的数据页了。速度当然快了。所以你查询语句如果用到了索引扫描,字段多和少,不大影响速度。
      

  3.   

    这个问题不好说!要看里面存储的是什么样的数据!查询时最好不用select * from tb....
    最好用select 列1-列N from tb....