【发布时间】:2013-06-08 16:53:17
【问题描述】:
我在数据库中有两个表:tb_CampaignLead 和 tb_Feed。这两个表都有数千行,并且在主键上各有一个索引。 tb_CampaignLead 的数据比 tb_Feed 多 20%。对于SELECT *,tb_Feed 仍然比 tb_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
【问题讨论】:
-
您需要向我们提供更多信息。对于初学者,什么 RDBMS(看起来像 SQL Server)?您的存储配置是什么?
-
首先,您如何在这两个表上执行和测量
SELECT *。明确描述您为确定这一点所做的工作。其次,这两个表的行数和数据空间(不包括索引)是多少?您可以通过右键单击资源管理器窗格中的数据库,然后选择 Reports..Disk Usage by Table 来获取 Management Studio (SSMS) 中的表信息。查看Data(KB)列并告诉我们这两个表的含义。 -
@squillman 是的,我使用的是 SQL Server 2008 R2。你能解释一下存储配置是什么意思吗?
-
@RBarryYoung 我正在从 SQL Server 管理工作室执行查询。我打开实际执行计划和客户端统计 SELECT * from tb_CampaignLead 总行数:463352 总执行时间:63118 Select * from tb_feed 总行数:363387 总执行时间:418337 所有查询都在清除缓存后运行,campaignlead 表的数据空间为 734832 feed 表的数据空间是 2595792
标签: sql-server database performance sql-server-2008-r2