Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 2005 在这种情况下创建索引会有帮助吗_Sql Server 2005_Indexing_Performance - Fatal编程技术网

Sql server 2005 在这种情况下创建索引会有帮助吗

Sql server 2005 在这种情况下创建索引会有帮助吗,sql-server-2005,indexing,performance,Sql Server 2005,Indexing,Performance,我仍然是SQL-SERVER2005的学习型用户 这是我的桌子结构 CREATE TABLE [dbo].[Trn_PostingGroups]( [ControlGroup] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [PracticeCode] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [ScanDate] [smalldatetime] NULL,

我仍然是SQL-SERVER2005的学习型用户

这是我的桌子结构

CREATE TABLE [dbo].[Trn_PostingGroups](
[ControlGroup] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[PracticeCode] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[ScanDate] [smalldatetime] NULL,
[DepositDate] [smalldatetime] NULL,
[NameOfFile] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DepositValue] [decimal](11, 2) NULL,
[RecordStatus] [char](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_Trn_PostingGroups_1] PRIMARY KEY CLUSTERED 
(
    [ControlGroup] ASC,
    [PracticeCode] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
场景1:假设我有这样一个查询

Select * from Trn_PostingGroups where PracticeCode = 'ABC'
单独对实践代码进行索引是否有助于我加快查询速度

场景2

Select * from Trn_PostingGroups 
where 
    ControlGroup = 12701 
    and PracticeCode = 'ABC'
    and NameOfFile = 'FileName1'

在NeNeFiLE上索引是否能帮助我更快地查询查询??

< p>每个查询表只能使用一个索引(除非您考虑自联接或CTE)。如果在同一查询中的同一表上可以使用多个数据,那么SQL Server将使用统计信息来确定哪个更适合使用

在场景1中,如果您单独在
PracticeCode
上创建索引,则通常会使用该索引,只要您有足够的行,表扫描成本更高,并且该列中的值范围不同。如果表中只有几行,则不会使用索引(只查看所有行会更快)。此外,如果该列中的大多数值相同,则不会使用索引。它不会在这个查询中使用PK,这就像在电话簿中查找名字一样,您不能使用索引,因为它是last+first name。如果您从不自己搜索控件组,则可以考虑将PK倒置为<代码> ActudioCord+控件组< /代码>。
在场景2中,如果您在NameOfFile上有一个索引,它可能会使用PK并忽略NameOfFile索引。除非您将文件索引的名称设置为唯一的,否则它就是tossup。您可以尝试在ControlGroup+PracticeCode+NameOfFile上创建索引(除了PK)。如果每个控件组+ StudioCudio都有很多文件,那么它可以在PK索引上选择该索引。

< P>您只能对每个查询使用一个索引(除非您考虑自联接或CTE)。如果在同一查询中的同一表上可以使用多个数据,那么SQL Server将使用统计信息来确定哪个更适合使用

在场景1中,如果您单独在
PracticeCode
上创建索引,则通常会使用该索引,只要您有足够的行,表扫描成本更高,并且该列中的值范围不同。如果表中只有几行,则不会使用索引(只查看所有行会更快)。此外,如果该列中的大多数值相同,则不会使用索引。它不会在这个查询中使用PK,这就像在电话簿中查找名字一样,您不能使用索引,因为它是last+first name。如果您从不自己搜索控件组,则可以考虑将PK倒置为<代码> ActudioCord+控件组< /代码>。
在场景2中,如果您在NameOfFile上有一个索引,它可能会使用PK并忽略NameOfFile索引。除非您将文件索引的名称设置为唯一的,否则它就是tossup。您可以尝试在ControlGroup+PracticeCode+NameOfFile上创建索引(除了PK)。如果每个ControlGroup+PracticeCode有许多文件,那么它可能会选择该索引而不是PK索引。

如果您只在第一个字段(ControlGroup)上进行选择,则它是聚集索引的主要排序,您不需要索引其他字段

如果在其他主键字段上选择,则在其他字段上添加单独的索引应有助于进行此类选择

通常,您应该为
SORT
WHERE
子句中常用的字段编制索引。这当然过于简化了


有关优化(统计和查询分析器)的更多信息,请参阅文章。

如果只在第一个字段(控制组)上进行选择,则它是聚集索引的主要排序,而不需要为另一个字段编制索引

如果在其他主键字段上选择,则在其他字段上添加单独的索引应有助于进行此类选择

通常,您应该为
SORT
WHERE
子句中常用的字段编制索引。这当然过于简化了


有关优化(统计和查询分析器)的更多信息,请参阅文章.

这在某种程度上取决于数据的选择性。您首先要确保的是您的统计数据是最新的……这在某种程度上取决于数据的选择性。您首先要确保的是您的统计数据是最新的……对不起。我找不到你。。。在第一种情况下,条件位于作为PKEY一部分的字段上,因此将返回许多行。。。但在第二种情况下,我给出了PKEY的所有值,所以它只返回一行。。但我在另一列上做了进一步的检查。我认为SQL server获取PKEY的数据并对照获取的行检查一列是合适的……我完全错过了问题中表定义的
主键部分。@Mitch怎么会这样?自连接,CTE,当然不是在问题中给出的简单查询中。学究:如果执行一个使用非覆盖、非聚集索引的简单查询,那么它也将使用聚集索引。所以说“每个查询每个表只能使用一个索引”严格来说是不对的。对不起。我找不到你。。。在第一种情况下,条件位于作为PKEY一部分的字段上,因此将返回许多行。。。但在第二种情况下,我给出了PKEY的所有值,所以它只返回一行。。但我在另一列上做了进一步的检查。我认为SQL server获取PKEY的数据并对照获取的行检查一列是合适的……我完全错过了问题中表定义的
主键部分。@Mitch怎么会这样?自连接,CTE,当然不是在问题中给出的简单查询中。学究:如果执行一个使用非覆盖、非聚集索引的简单查询,那么它也将使用聚集索引。萨因