【发布时间】:2012-09-17 08:40:21
【问题描述】:
我有一些性能问题。
我有一个大约有 200 万行的表。
CREATE TABLE [dbo].[M8](
[M8_ID] [int] IDENTITY(1,1) NOT NULL,
[APPLIC] [char](8) NOT NULL,
[NIVALERTE] [numeric](1, 0) NOT NULL,
[LOGDH] [datetime2](7) NULL,
[USERX] [char](20) NOT NULL,
[TACHE] [char](3) NOT NULL,
[PRG] [char](32) NOT NULL,
[DOS] [numeric](3, 0) NOT NULL,
[ERRNUM] [numeric](5, 0) NOT NULL,
[LOGTXT] [char](200) NOT NULL)
我用 C# 和 ADO.NET 阅读它们
在管理工作室(SQL Server 2008 R2)中,使用该查询:
SELECT
M8.M8_ID, M8.APPLIC, M8.NIVALERTE, M8.LOGDH, M8.USERX, M8.TACHE,
M8.PRG, M8.DOS, M8.ERRNUM, M8.LOGTXT
FROM
M8 AS M8 WITH(NOLOCK)
WHERE
((M8.APPLIC LIKE 'DAV' ) )
ORDER BY
M8.LOGDH DESC, M8.M8_ID ASC
OPTION (FAST 1)
第一行大约需要 1 分钟。
但是,与
DECLARE @APPLIC_ZOOMAPRESCLE_ZOOM_LIKE_APPLIC_WHERE_0 as char(8) = 'DAV'
SELECT
M8.M8_ID, M8.APPLIC, M8.NIVALERTE, M8.LOGDH, M8.USERX, M8.TACHE,
M8.PRG, M8.DOS, M8.ERRNUM, M8.LOGTXT
FROM
M8 AS M8 WITH(NOLOCK)
WHERE
((M8.APPLIC LIKE @APPLIC_ZOOMAPRESCLE_ZOOM_LIKE_APPLIC_WHERE_0 ) )
ORDER BY
M8.LOGDH DESC, M8.M8_ID ASC
OPTION(FAST 1)
我在 4 秒后得到第一行。
PS : 我知道,我没有 % 之类的。
编辑:这里是执行计划https://www.dropbox.com/sh/jgai5f9txbs84x6/EP5_hj8DNv
【问题讨论】:
-
你是按这个顺序运行它们的吗?
-
那如果不需要的话最好用=代替like。
-
@Jodrell : 我清除了它们之间的缓存
-
@AndrásOttó:我知道,但这是一个通用查询。在那个程序中,我不能...
-
@Xavinou Reported here so see what they say
标签: sql sql-server performance tsql