标签: sql-server-2012

SSMS 缺失索引功能建议的这两个索引是否应该合并?

我正在尝试提高由实体框架自动生成的特定查询的性能。我已经通过 SSMS 运行了查询,它建议创建两个缺失的索引。有问题的表:

CREATE TABLE [dbo].[PackageEvents]
(
[EventID] [int] NOT NULL IDENTITY(1, 1),
[PackageID] [char] (24) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[EventDescription] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[EventDate] [datetime] NOT NULL,
[UserName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Notes] [varchar] (max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[IsSynchronized] [bit] NOT NULL CONSTRAINT [DF_AmazonPackageEvents_IsSynchronized]  
  DEFAULT ((0)),
[LastSyncDate] [datetime] NULL,
[Version] [timestamp] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

SSMS 建议了以下两个索引:

CREATE NONCLUSTERED INDEX [IX_IsSynchronized] ON [dbo].[PackageEvents]  
([IsSynchronized]) INCLUDE ([PackageID])

CREATE NONCLUSTERED INDEX [IX_Covering] ON [dbo].[PackageEvents] ([PackageID])  
INCLUDE …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server index-tuning sql-server-2012

1
推荐指数
1
解决办法
316
查看次数

sql server 服务代理

最近几天,从主数据库运行的服务代理命令消耗的资源比以前多得多。对数据库的影响很大(从不好的方面来看),它会导致内部等待。在 2014 年 7 月 10 日之前和之后,我没有对数据库进行任何更改(您可以在图表中看到此开始日期)。我检查了是否在任何数据库中启用了服务代理,发现它是在 Tempdb 和 Msdb 中。什么会导致这些变化?

我附上了一张图表,你可以看到行为的变化。

在此处输入图片说明 在此处输入图片说明

我附上了另一个屏幕截图,你可以从 sp_who2 看到,我不明白的是,你可以看到“LastBatch”是非常旧的,从 10/12 07:55 开始(这个结果来自今天 10/ 20/2014 10:23 当地时间)。为什么会话没有关闭。?

sql-server service-broker sql-server-2012 wait-types

1
推荐指数
1
解决办法
1044
查看次数

执行计划的查询结果不正确,不确定问题的确切原因

昨天我们有一个查询,旨在翻阅结果,但在结果的第一页上,查询只返回 4 条记录,而不是预期的 25 条。以任何方式更改查询都会导致 25 条记录,这对我来说意味着这是一次执行计划问题。我不熟悉在生产中查看执行计划的方法,并且在 sql studio 中运行查询没有导致相同的问题,可能是由于细微的差异。

我阅读了一些建议,认为这种事情可能是由损坏的索引引起的。我在数据库上运行了 checkdb 并没有发现错误。最后我清除了执行计划,一切都很好。

如果它不是某种类型的损坏问题,而只是非常具体的执行计划的问题,那么这是否意味着执行计划中存在错误并且我们在 SQL Server 中遇到了错误?我们在 SQL Server 2012 RTM 上没有更新,所以我查看了累积更新和服务包中所有修复的文档,但没有一个问题似乎与我们自己的相关。

关于可能导致这种情况的任何其他想法或想法?

(@P1 varchar(8000),@P2 bit,@P3 varchar(8000),@P4 bit,@P5 varchar(8000))

SELECT e.*
FROM (

    SELECT 

        TOP 25
        ROW_NUMBER() OVER (
            ORDER BY AddedDate DESC
        ) AS Row,

        ID
        , Prefix
        , FirstName
        , LastName
        , Company
        , Address
        , City
        , State
        , Zip
        , Country
        , WorkPhone
        , HomePhone
        , MobilePhone
        , Email
        , MailingLists
        , AddedDate
        , AwaitingOptin
        , …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

1
推荐指数
1
解决办法
951
查看次数

Tempdb 文件不存在

我在我的 SQL Server 的 tempdb 之一上有一个奇怪的行为。
它有六个 tempdb 文件,根据 SSMS 和查询,都指向 S 目录。他们每个人都有 ~5gb 的初始大小。
奇怪的是 S 是法定人数,实际上只有 2GB 的可用空间。Tempdb 文件根本不存在于 S 及其子目录中。
问题是 tempdb 文件在哪里?:) 我怎样才能看到它们?
谢谢你。

sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 tempdb

1
推荐指数
1
解决办法
168
查看次数

ISNULL() OR 在 UPDATE 语句中为 NULL

我必须UPDATE在具有 50 万条记录的实时在线数据库上运行一条语句。我想知道哪个语句运行得更快:

Update Table set REC_ID = isnull(REC_ID,'')

Update Table set REC_ID = '' where REC_ID is null
Run Code Online (Sandbox Code Playgroud)

我正在使用 Microsoft SQL Server 2012

null sql-server sql-server-2012 update

1
推荐指数
1
解决办法
5万
查看次数

基于其他位列的计算列位

从其他位列计算位列的公式是什么?

例如:

CREATE TABLE #Employee
(
[empNumb]       [INT] identity(1,1) PRIMARY KEY,
[IsOk]          [BIT] NOT NULL, -- This is computed from other three columns.
[HasValidHours] [BIT] NOT NULL,
[NoDemerits]    [BIT] NOT NULL,
[NoAccidents]   [BIT] NOT NULL
);

ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_HasValidHours]  
  DEFAULT ((0)) FOR [HasValidHours];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoDemerits]  
  DEFAULT ((0)) FOR [NoDemerits];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoAccidents]  
  DEFAULT ((0)) FOR [NoAccidents];
Run Code Online (Sandbox Code Playgroud)

IsOk将根据,和的-ing计算。HasValidHoursNoDemeritsNoAccidents

sql-server sql-server-2012 table

1
推荐指数
1
解决办法
2445
查看次数

使用带有 2 个表的 CASE 更新

我有2个表,我想更新table2与的标准table1table2。标准是:

1.table1.amount > 10000

2.table2.flag为空或table2.flag = '0'

因此,如果 2 个条件为真,则更新table2.flag = '1'table2.flagdate = getdate()

table2.flag是一个检查每个支付超过10,000的人的标志。但是如果已经标记了,我不想再次标记,因为我不能丢失原始的table2.flagdate. 但是我尝试了很多东西,没有任何效果是我想要的。有任何想法吗?

sql-server sql-server-2012

1
推荐指数
1
解决办法
1522
查看次数

执行 LIKE WHERE 条件的不同方式?

我有一个工作正常的查询:

  SELECT  
         month_date= month(SendTime) ,year_date =year(sendtime) ,MessageType
          ,COUNT(MessageType) AS MESSAGE_COUNT
  FROM Message
  WHERE year(SendTime)= 2014
      and messagetype NOT LIKE '%test%' 
      and messagetype NOT LIKE '%ANOTHER THING%' 
      and messagetype NOT LIKE '%STUFF%' 
  GROUP BY month(SendTime),year(sendtime), MessageType
Run Code Online (Sandbox Code Playgroud)

我注意到的是LIKE有条件它使流逝时间变慢。

使用上面的查询,它在经过时间 0.550 运行,没有它们 0.154。

有没有其他方法可以缩短这次时间并使查询更快?

没有消息类型不是索引,我不允许更改它。

sql-server-2012

1
推荐指数
1
解决办法
75
查看次数

轻松修复碎片堆索引的最佳选择是什么?

我在这些服务器上有 SQL Server 2008 R2 SP2 和 SQL Server 2012 SP2。

我有一个数据库,其中有很多堆索引超过 90% 的碎片。

轻松修复这些堆索引的最佳选择是什么?

performance sql-server sql-server-2008-r2 sql-server-2012

1
推荐指数
1
解决办法
1959
查看次数

有没有办法可以将以下查询缩短为单个查询?

我有以下查询。有没有一种方法可以将其放入一个查询中?如果没有,我可以进一步缩小它吗?请指教。

    DECLARE @highRegion TABLE(regionId INT, countR INT)
    DECLARE @lowRegion TABLE(regionId INT, countR INT)
    DECLARE @midRegion TABLE(regionId INT, countR INT)

    INSERT INTO @highRegion
    SELECT c.fRegionID,
           COUNT(1) AS VALUE
    FROM   census.Country c
           INNER JOIN census.IncomeGroup ig
                ON  c.fIncomeGroupID = ig.IncomeGroupID
    WHERE  ig.Name IN ('High income: nonOECD', 'High income: OECD')
    GROUP BY
           c.fRegionID

    INSERT INTO @lowRegion
    SELECT c.fRegionID AS VALUE,
           COUNT(1)
    FROM   census.Country c
           INNER JOIN census.IncomeGroup ig
                ON  c.fIncomeGroupID = ig.IncomeGroupID
    WHERE  ig.Name = 'Upper middle income'
    GROUP BY
           c.fRegionID

    INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization sql-server-2012 query-performance

1
推荐指数
1
解决办法
645
查看次数