Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL语句执行时间较长_Sql_Sql Server - Fatal编程技术网

SQL语句执行时间较长

SQL语句执行时间较长,sql,sql-server,Sql,Sql Server,我有一个SQL Server数据库,并且有一个包含太多记录的表。以前它工作得很好,但现在运行SQL语句需要时间来执行。 有时会导致SQL数据库使用太多CPU。 这是表的查询 CREATE TABLE [dbo].[tblPAnswer1]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [AttrID] [int] NULL, [Kidato] [int] NULL, [Wav] [int] NULL, [Was] [int] NULL, [ShuleID] [in

我有一个SQL Server数据库,并且有一个包含太多记录的表。以前它工作得很好,但现在运行SQL语句需要时间来执行。 有时会导致SQL数据库使用太多CPU。 这是表的查询

CREATE TABLE [dbo].[tblPAnswer1](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[AttrID] [int] NULL,
[Kidato] [int] NULL,
[Wav] [int] NULL,
[Was] [int] NULL,
[ShuleID] [int] NULL,
[Mwaka] [int] NULL,
[Swali] [float] NULL,
[Wilaya] [int] NULL,
 CONSTRAINT [PK_tblPAnswer1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
下面是该语句的sql存储过程

    ALTER PROC [dbo].[uspGetPAnswer1](@ShuleID int, @Mwaka int, @Swali float, @Wilaya int)
as

SELECT ID,
       AttrID,
       Kidato,
       Wav,
       Was,
       ShuleID,
       Mwaka,
       Swali,
       Wilaya
FROM   dbo.tblPAnswer1
WHERE  [ShuleID] = @ShuleID
       AND [Mwaka] = @Mwaka
       AND [Swali] = @Swali
       AND Wilaya = @Wilaya 

我的SQL语句中有什么错误。需要帮助。

ID
列中添加索引,包括
ShuleID
Mwaka
Swali
Wilaya
列。这将有助于提高查询速度

CREATE NONCLUSTERED INDEX IX_ID_ShuleID_Mwaka_Swali_Wilaya
ON tblPAnswer1 (ID)
INCLUDE (ShuleID, Mwaka, Swali, Wilaya);

这张桌子有多大?您可能需要额外的索引,因为您没有使用主键来查询数据。PinalDave的这篇文章提供了一个脚本来识别缺失的索引


它为索引优化提供了一个良好的起点。

只需在ShuleID、Mwaka、Swali和Wilaya列上添加一个索引即可。索引中列的顺序应取决于数据的分布(其中值差异最大的列应位于索引中的第一列,依此类推)

如果您需要超快速的索引,还可以包括查询中使用的所有剩余列,以便为这个特定查询创建覆盖索引


编辑:可能应该将浮点列(Swali)从索引列移动到包含列。

将where子句放入的列是否已索引?这是一个非常高的事务数据库吗?您正在按
float
列的精确值进行搜索?表已聚集在ID列上,为什么再次使用NC?此外,它与这个特定的查询无关。我的表有超过10000000条记录