各位达人,我这个表有什么问题吗?为什么数据量较少[2000条]的情况下查询都会超时?
谢谢!~~~
USE [TEh]
GO
/****** 对象: Table [dbo].[Message] 脚本日期: 10/23/2012 14:07:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Message](
[NO] [nvarchar](16) NOT NULL,
[ANO] [int] NOT NULL,
[BNO] [int] NULL,
[iType] [int] NULL,
[sDeptName] [nvarchar](20) NULL,
[sUserName] [nvarchar](10) NULL,
[sDateTime] [smalldatetime] NULL,
[Title] [nvarchar](64) NULL,
[iText] [ntext] NULL,
[rDeptName] [nvarchar](20) NULL,
[rUserName] [nvarchar](10) NULL,
[Sented] [bit] NULL CONSTRAINT [DF_Message_Sented] DEFAULT ((0)),
[sDel] [bit] NULL CONSTRAINT [DF_Message_sDel] DEFAULT ((0)),
[iRead] [bit] NULL CONSTRAINT [DF_Message_iRead] DEFAULT ((0)),
[rDel] [bit] NULL CONSTRAINT [DF_Message_rDel] DEFAULT ((0)),
[iReadDateTime] [smalldatetime] NULL,
CONSTRAINT [PK_Message] PRIMARY KEY CLUSTERED
(
[NO] ASC,
[ANO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
------解决方案--------------------
没看出有啥问题。
------解决方案--------------------
查询执行多久 报的超时? 一个表查数据竟然超时?
------解决方案--------------------
直接在SQL查询也会超时吗?
------解决方案--------------------
查询语句呢?
从别结构来开,使用联合主键是极不合理的,[NO]是nvarchar
不要在非int 类型的字段上使用主键,尽量少用联合主键
这样效率不好,很容易出现碎片 也很容易block
------解决方案--------------------
1. 我们要看什么样的环境,比如这张表的你要查的那一条记录24个小时其中有10个小时都持有X锁.
2. 我们看看自己执行的语句是并行的还是串行的..我们也的看看这个并行的 query 的query wait 是多少如果
是1秒,那很容易就超时了啊
3. 我们在看看也的密度, 你的条数是很少,但是有大量的数据空页没有释放...比如有10个T的空页都没有释放,你
一个查询扫描空也的时间要比你扫描数据的时间更长啊(此现象发生在堆结构中,也就是你表没有 clustered
index)
4. 我还没有想起来!
------解决方案--------------------
select * from [dbo].[Message] where [NO]='值1'... where中用主键做条件筛选试试
------解决方案--------------------
执行情况最好还是看看执行计划。
------解决方案--------------------
你们都在说啥啊,里面有个ntext字段,如果不需要这个字段的值,select字句里面不要包含它,如果要用到,可考虑换成varbinary(max)