2013-06-12 95 views
-2

我在數據庫中有兩個表:tb_CampaignLeadtb_Feed。兩個表都有成千上萬的行,並且每個主鍵上都有一個索引。 tb_CampaignLead擁有比tb_Feed多20%的數據。對於SELECT *,仍然tb_Feedtb_CampaignLead慢6倍。誰能告訴我爲什麼tb_Feed這麼慢。該表結構如下:數據庫表緩慢

CREATE TABLE [dbo].[tb_Feed](
    [FeedID] [uniqueidentifier] NOT NULL, 
    [DateCreated] [smalldatetime] NULL, 
    [LeadSourceID] [int] NULL, 
    [RawLeadURL] [nvarchar](max) NULL, 
    [CostPerEnquiry] [money] NULL, 
    [ResultText] [nvarchar](max) NULL, 
    [SrcResultText] [nvarchar](max) NULL, 
    [SrcResult] [bit] NULL, 
    [Encrypted] [bit] NULL, 
    [ProductID] [int] NULL, 
CONSTRAINT [PK_tb_Feed] PRIMARY KEY CLUSTERED 


CREATE TABLE [dbo].[tb_CampaignLead](
    [LeadID] [uniqueidentifier] NOT NULL, 
    [FeedID] [uniqueidentifier] NOT NULL, 
    [CampaignID] [int] NOT NULL, 
    [ProductID] [int] NOT NULL, 
    [CompanyID] [int] NOT NULL, 
    [LeadSourceID] [int] NOT NULL, 
    [DateCreated] [smalldatetime] NULL, 
    [LeadTextEmail] [nvarchar](max) NULL, 
    [LeadTextOther] [nvarchar](max) NULL, 
    [DateSent] [smalldatetime] NULL, 
    [EmailResponse] [nvarchar](max) NULL, 
    [OtherResponse] [nvarchar](max) NULL, 
    [EmailOK] [bit] NULL, 
    [OtherOK] [bit] NULL, 
    [ResultPass] [bit] NULL, 
    [L_Title] [nvarchar](50) NULL, 
    [L_Email] [nvarchar](100) NULL, 
    [L_Firstname] [nvarchar](max) NULL, 
    [L_Surname] [nvarchar](max) NULL, 
    [L_Address1] [nvarchar](max) NULL, 
    [L_Address2] [nvarchar](max) NULL, 
    [L_Address3] [nvarchar](max) NULL, 
    [L_TownCity] [nvarchar](max) NULL, 
    [L_AreaRegion] [nvarchar](max) NULL, 
    [L_Country] [nvarchar](max) NULL, 
    [L_PostCode] [nvarchar](50) NULL, 
    [L_Telephone1] [nvarchar](50) NULL, 
    [L_Telephone2] [nvarchar](50) NULL, 
    [L_DOB] [smalldatetime] NULL, 
    [L_Extra1] [nvarchar](max) NULL, 
    [L_Extra2] [nvarchar](max) NULL, 
    [L_Extra3] [nvarchar](max) NULL, 
    [L_Extra4] [nvarchar](max) NULL, 
    [L_Extra5] [nvarchar](max) NULL, 
    [L_Extra6] [nvarchar](max) NULL, 
    [L_Extra7] [nvarchar](max) NULL, 
    [L_Extra8] [nvarchar](max) NULL, 
    [L_Extra9] [nvarchar](max) NULL, 
    [L_Extra10] [nvarchar](max) NULL, 
    [L_Extra11] [nvarchar](max) NULL, 
    [L_Extra12] [nvarchar](max) NULL, 
    [L_Extra13] [nvarchar](max) NULL, 
    [L_Extra14] [nvarchar](max) NULL, 
    [L_Extra15] [nvarchar](max) NULL, 
    [L_Extra16] [nvarchar](max) NULL, 
    [L_Extra17] [nvarchar](max) NULL, 
    [L_Extra18] [nvarchar](max) NULL, 
    [L_Extra19] [nvarchar](max) NULL, 
    [L_Extra20] [nvarchar](max) NULL, 
    [SourceCost] [money] NULL, 
    [CampaignCost] [money] NULL, 
    [DeliveredPass] [bit] NULL, 
    [FieldReqBWAND] [int] NULL, 
    [FieldSuppliedBWAND] [int] NULL, 
    [FilterBWAND] [int] NULL, 
    [FilterPassBWAND] [int] NULL, 
    [OPFilterBWAND] [int] NULL, 
    [OPFilterPassBWAND] [int] NULL, 
    [ProcessBWAND] [int] NULL, 
    [ProcessPassBWAND] [int] NULL, 
    [L_MobileNetwork] [nvarchar](max) NULL, 
    [SrcResultPass] [bit] NULL, 
CONSTRAINT [PK_tb_CampaignLead] PRIMARY KEY CLUSTERED 
+2

你需要給我們更多的信息。對於初學者來說,什麼RDBMS(看起來像SQL Server)?什麼是您的存儲配置? – squillman

+0

首先,你如何在這兩個表上執行和測量'SELECT *'。明確描述你如何確定這一點。其次,這兩個表的行數和數據空間(不包括索引)是什麼?您可以通過右鍵單擊資源管理器窗格中的數據庫,然後選擇Reports ..Disk Usage by Table,在Management Studio(SSMS)中獲取表信息。查看「Data(KB)」列,並告訴我們這兩個表的含義。 – RBarryYoung

+0

@squillman是的,我正在使用SQL Server 2008 R2。你能解釋一下你的存儲配置是什麼意思嗎? – user2478704

回答

2

使用您的評論信息:

數據空間爲campaignlead表734832飼料表中的數據空間是2595792

正如你所看到的,儘管行數較少,但tb_Feed的總數據量是tb_CampaignLead的3.5倍以上。當您在SSMS中執行SELECT * From ...時,它實際上必須檢索那麼多數據,格式化它,通過網絡連接(如果您從客戶端運行),然後將其呈現到輸出網格中。

對於小型數據集,這非常快,因此它不是查詢執行時間的重要組成部分。另外,它可以被緩衝以使其看起來更快。但是,對於大型數據集,這可能需要相當長的時間,並且輸出緩衝區/管道將開始備份。這不僅會減慢查詢執行時間,而且它實際上可能成爲其主導因素。

因此對於SSMS中這種大小的查詢,實際上我們預計tb_Feedtb_CampaignLead長3.5倍。所以,雖然不完全一樣,但你的結果當然是在正確的場地。

這些表格中還有其他的東西可能會導致額外的差異,包括每個表格「存儲在外」的數據量有多少。這裏有另一個問題有一些答案:Should I use an inline varchar(max) column or store it in a separate table?

+0

也許數據庫需要歸一化?通過查看「tb_CampaignLead」表,我可以看到至少有2或3個表格可以用它來製作。索引(適度)也是一件好事。 –

+1

@ DaniellePaquette-Harvey可能。但是如果他們真的需要這個表中每一列的每一行,那麼規範化不會使它更快。但是,恕我直言,他們似乎不太可能真正想要這樣做。 – RBarryYoung