Tôi có bảng cơ sở dữ liệu chứa chi tiết khách hàng và khi họ gọi điện, chúng tôi sử dụng điện thoại của họ để tra cứu chi tiết, nhưng thường mất khoảng 2-3 giây đã mất 5 giây mà không có thêm dữ liệu. Nếu tôi truy vấn bảng bằng cách sử dụng home_phone_no = '441903354676' điều này trả về trong phụ thứ hai. Nhưng nếu nó được truy vấn bằng cách sử dụng home_phone_no = '441903354676' hoặc business_phone_no = '441903354676' thì điều này mất 5 giây.Truy vấn SQL của tôi mất quá nhiều thời gian khi sử dụng chỉ mục không được nhóm
Hiện có một số bản ghi khách hàng 1.4m. Nhưng nếu bất cứ ai có thể nhìn thấy bất cứ điều gì rõ ràng hoặc cung cấp một số gợi ý hữu ích này được chào đón nhất.
Đây là cấu trúc của bảng
CREATE TABLE [dbo].[CCDB_ICR]
(
[bill_account_no] [varchar](10) NOT NULL,
[reference_id] [varchar](11) NULL,
[bill_account_status] [varchar](2) NULL,
[customer_type] [varchar](1) NULL,
[customer_name] [varchar](56) NULL,
[property_address] [varchar](69) NULL,
[outer_post_code] [varchar](4) NULL,
[inner_post_code] [varchar](3) NULL,
[customer_move_in_date] [datetime2](7) NULL,
[customer_move_out_date] [datetime2](7) NULL,
[debt_flag] [varchar](1) NULL,
[payment_category_flag] [varchar](2) NULL,
[payment_plan_flag] [varchar](1) NULL,
[key_customer_flag] [varchar](1) NULL,
[home_phone_no] [varchar](12) NULL,
[business_phone_no] [varchar](12) NULL,
[contact_type] [varchar](4) NULL,
[contact_code] [varchar](1) NULL,
[contact_method] [varchar](1) NULL,
[contact_date] [date] NULL,
[contact_time] [varchar](5) NULL,
[contact_status] [varchar](1) NULL,
[contact_unit_resp] [varchar](4) NULL,
[outstanding_balance] [decimal](9, 2) NULL,
[date_time_inserted] [datetime] NOT NULL,
[date_time_updated] [datetime] NULL,
CONSTRAINT [PK_CCDB_ICR]
PRIMARY KEY CLUSTERED([bill_account_no] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Đây là cấu trúc của chỉ số:
CREATE NONCLUSTERED INDEX [NC_Business&Home_Phone$CCDB_ICR]
ON [dbo].[CCDB_ICR] ([home_phone_no] ASC, [business_phone_no] ASC)
INCLUDE ([bill_account_no])
Dưới đây là thủ tục lưu trữ
ALTER procedure [dbo].[GET_ACCOUNT_BY_PHONE_NUMBER]
(
@CLI varchar(12),
@RETURN_VALUE int out,
@NUMBER_OF_ACCOUNTS int out,
@ACCOUNT_NUMBER varchar(10) out
)
as
Begin Try
declare @ret int
Select @ret=COUNT(*) from CCDB_ICR where [email protected] or [email protected]
if @ret=0
select @RETURN_VALUE=0,
@NUMBER_OF_ACCOUNTS=0,
@ACCOUNT_NUMBER=null
else if @ret=1
select @RETURN_VALUE=0,
@NUMBER_OF_ACCOUNTS=1,
@ACCOUNT_NUMBER=(Select bill_account_no from CCDB_ICR where [email protected] or [email protected])
else if @ret>1
select @RETURN_VALUE=0,
@[email protected] ,
@ACCOUNT_NUMBER=null
end Try
Begin Catch
select @RETURN_VALUE=-1,
@NUMBER_OF_ACCOUNTS=null ,
@ACCOUNT_NUMBER=null
End Catch
hãy bao gồm truy vấn được sử dụng và cũng là kế hoạch thực hiện trong cả hai trường hợp – TheGameiswar