回答

收藏

sp_executesql我的查询很慢

技术问答 技术问答 267 人阅读 | 0 人回复 | 2023-09-14

运行在数据库表上sp_executesql遇到一些问题。我用的是ORM(NHibernate),在这种情况下,该ORM(NHibernate)查询表的生成SQL查询。该表记录约700万条,已被高度索引。, C9 k" F' I2 {. M, d4 h  [
当我运行的时候sp_executesql的ORM吐出查询时,它运行非常快,探测器显示它读取85次。当我使用它时sp_executesql同一查询时,其读取次数约为201、828。  l0 L' Y8 P/ ~4 q; A' }* V4 A7 X+ D
我需要在SQL Server做点什么改进?sp_exectuesql运行查询的性能?它似乎没有使用我的索引。1 B: g. Z$ a+ o$ v- r+ J) i% H
解决这个问题的最好方法是什么?如果可能的话,我宁愿不改变ORM生成SQL但是SQL Server4 z7 X# Y8 {* o' }: o7 \8 B# J5 v
/解决数据库级别的问题,因为这似乎是问题所在。我想我需要更多地优化数据库来解决这个问题。我只是不知道是什么。1 ?! P: p' w; f0 ^# d: ~, t
exec sp_executesql N'SELECT top                                                                                                                                                                                                                           this_.Id as Id0_0_,                            this_.Application as Applicat2_0_0_,                            this_.[Context] as column3_0_0_,                            this_.Logger as Logger0_0_,                            this_.Message as Message0_0_,                            this_.Exception as Exception0_0_,                            this_.Thread as Thread0_0_,                                                                                                                this_.[Level] as column8_0_0_,                            this_.LogDate as LogDate0_0_,                            this_.SessionId as SessionId0_0_                        FROM LogMessages this_                       WHERE this_.[Context] = @p         N'@p0 nvarchar(2)           @p0 = N'55'上下文是varchar(255)。这个字段是一种非常自由的形式。不总是整数,长度可能很大。在这种情况下,我想查询的值是 55,但很容易查询" |$ {/ ^" H6 f5 _: @) }
Foooooobaaaarrr”
% l" T* Z' s& h7 Z: ~                                                               
* E$ q) j4 T/ L+ J; s7 b% W9 f    解决方案:                                                               
' Y- s: K" S* Q& U9 r9 T' p                                                                。[Context]什么是数据类型?使用相同类型的数据
% R/ p3 v' P8 c您现在正在使用它nvarchar(2),但是对于像55这样的东西来说似乎很奇怪,如果您使用的数据类型不同,则会得到转换,从而导致扫描
4 B, R7 R- k3 w* E根据你更新的问题,看起来像是varchar(255)然后执行此操作
$ x3 v7 X+ ]# _6 @+ f! |' pWHERE this_.[Context] = @p0',N'@p0 varchar(255)',@p0=
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则