很多人都说Select 后面 * 好还是字段名称好,都有疑问。我也以前对此问题模糊不清,经常以为select后面直接写每一个字段会好。

    但是今天我对论坛查询情况跟踪分析的时候,一个翻页查询的read始终很高,不管我用*还是每一个字段写上, 都是很高。

    这个表格大概有七十万条数据。

    select * from table 或者 select col1,col2,col3 from table两种情况。

 

在下图中黄色注释部分描述上看到,这条语句偏偏在主键id上消耗那么资源,太不可思议。就此把select后面的字段少些几个都是一样的分析结果。最后我就只剩下主键ID来查询,果然凑效!~~~~

 

select top 40 topic_Id
 from  Forum_topic with(nolock) where 1=1
  and IsDelete=0  and IsTop2=0 and Board_ID=13 order by istop desc,LastReplyTime desc,Topic_id desc

 

 

 

以上两个图片在select 查询的字段的选择上,性能预计成本大不相同。甚至万级别的成本,是在不可忍受。

有了这样的初步结果之后,我就对此论坛的数据库i/o一直很高有了初步的解决办法。

还有一个就是一下查询中,不知道为什么有些参数(红色)那么特别,请高人指点~~~

dbcc memorystatus

Buffer Distribution            Buffers    
------------------------------ -----------
Stolen                         7119
Free                           3608
Procedures                     711
Inram                          0
Dirty                          1171
Kept                           0
I/O                            0
Latched                        18
Other                          194077

(所影响的行数为 9 行)

Buffer Counts                  Buffers    
------------------------------ -----------
Commited                       206704
Target                         206704
Hashed                         195266
InternalReservation            526
ExternalReservation            0
Min Free                       1936
Visible                        206704

(所影响的行数为 7 行)

Procedure Cache                Value      
------------------------------ -----------
TotalProcs                     445
TotalPages                     711
InUsePages                     291

(所影响的行数为 3 行)

Dynamic Memory Manager         Buffers    
------------------------------ -----------
Stolen                         7830
OS Reserved                    13648
OS Committed                   13626
OS In Use                      13147
General                        1187
QueryPlan                      708
Optimizer                      0
Utilities                      11
Connection                     18480

(所影响的行数为 9 行)

 
Global Memory Objects          Buffers    
------------------------------ -----------
Resource                       931
Locks                          225
XDES                           112
SQLCache                       70
Replication                    2
LockBytes                      2
ServerGlobal                   23

(所影响的行数为 7 行)

 
Query Memory Objects           Value      
------------------------------ -----------
Grants                         0
Waiting                        0
Available (Buffers)            99648
Maximum (Buffers)              99648

(所影响的行数为 4 行)

Optimization Queue             Value      
------------------------------ -----------
Optimizing                     0
Waiting                        0
Available                      64
Maximum                        64

(所影响的行数为 4 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。