3

我有一个 Sql Azure 数据库,从过去 6 个月到今天一切都很好,当一个简单的

Delete from ListData where ListID=2323

运行查询 14 分钟后,未能从 190 万条记录中删除 7500 条记录。但是选择查询需要不到 2-3 秒的时间来列出它们。

以前删除的工作很像选择,完成删除操作通常需要不到 20 秒的时间。只是今天出了点问题。

完整的数据库大小为 1.1GB,因为我们将 Web 版本设置为 5GB,所以我们有足够的可用空间。

知道出了什么问题吗?该删除在系统中引起了一些严重的问题,导致我的客户损失了很多钱。

感谢您的任何指导。

编辑:我确实有几个索引表,但表中没有触发器、FK 或任何其他类似的东西。LISTID [逻辑上] 是外键,RecordID [表中的另一列] 是 Listdata 表中的自动递增 id。

*编辑 2 * :

    /****** Object:  Table [dbo].[tblSalesListData]    Script Date: 02-07-2013 11:45:14 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    CREATE TABLE [dbo].[ListData](
        [RecordID] [bigint] IDENTITY(1,1) NOT NULL,
        [ListID] [bigint] NULL,
        [SalesID] [bigint] NULL,
        [UserID] [varchar](100) NULL,
        [FirstName] [varchar](100) NULL,
        [MiddleName] [varchar](50) NULL,
        [LastName] [varchar](50) NULL,
        [Address1] [varchar](100) NULL,
        [Address2] [varchar](100) NULL,
        [City] [varchar](100) NULL,
        [State] [varchar](100) NULL,
        [ZipCode] [varchar](10) NULL,
        [WorkPhone] [varchar](15) NULL,
        [HomePhone] [varchar](15) NULL,
        [CellPhone] [varchar](15) NULL,
        [Email] [varchar](100) NULL,
        [DealerCode] [varchar](20) NULL,
        [IsPrinted] [varchar](10) NULL,
        [tag] [varchar](100) NULL,
        [RecordDate] [datetime] NULL,
        [CustomInfo] [text] NULL,
        [SourceData] [text] NULL,
     CONSTRAINT [PK_ListData] PRIMARY KEY CLUSTERED 
    (
        [RecordID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    )

    GO

    SET ANSI_PADDING OFF
    GO

    ALTER TABLE [dbo].[ListData] ADD  DEFAULT ('N') FOR [IsPrinted]
    GO
4

3 回答 3

2

尝试添加索引并更改表结构 -

CREATE TABLE dbo.tblSalesListData
(
    RecordID BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    ListID BIGINT NOT NULL, -- NULL --> NOT NULL
    SalesID BIGINT NULL,
    UserID VARCHAR(100) NULL,
    FirstName VARCHAR(100) NULL,
    MiddleName VARCHAR(50) NULL,
    LastName VARCHAR(50) NULL,
    Address1 VARCHAR(100) NULL,
    Address2 VARCHAR(100) NULL,
    City VARCHAR(100) NULL,
    [State] VARCHAR(100) NULL,
    ZipCode VARCHAR(10) NULL,
    WorkPhone VARCHAR(15) NULL,
    HomePhone VARCHAR(15) NULL,
    CellPhone VARCHAR(15) NULL,
    Email VARCHAR(100) NULL,
    DealerCode VARCHAR(20) NULL,
    IsPrinted VARCHAR(10) NULL,
    tag VARCHAR(100) NULL,
    RecordDate DATETIME NULL,
    CustomInfo VARCHAR(MAX) NULL, -- TEXT --> VARCHAR(MAX)
    SourceData VARCHAR(MAX) NULL  -- TEXT --> VARCHAR(MAX)
)
GO

CREATE /*UNIQUE*/ NONCLUSTERED INDEX IX_ListID ON dbo.tblSalesListData
(
    ListID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
于 2013-07-02T06:27:42.610 回答
1

我有一点同样的问题。我做了以下步骤。但请务必在执行这些步骤之前备份数据库。

  • 创建另一个具有相同结构的表
  • 在旧表的新表中插入数据
  • 丢弃旧表

并再次尝试查看需要多少时间。

于 2013-07-02T05:27:42.733 回答
0

感谢@Dinup 和@Devart 给了我想法,虽然我没有完全听从他们的话,但他们都指导我找到解决方案的方向:

  1. 根据我的 ListID 删除所有索引。
  2. 运行我的查询,现在只需不到 1 秒。
  3. 重新创建我的索引。

快乐生活。

于 2013-07-02T06:36:15.873 回答