我正在开发一个现有项目,一切正常,但现在该网站包含超过200,000条记录。现在我遇到了性能问题。现在,当我尝试从表中获取记录时,即使我在查询中使用了分页,也需要20多分钟才能获取记录。下面是我使用左连接从多个表中获取记录的查询。
SELECT cus.sl_no, cus.customer_name, ccd.address, ccd.mobile_no, ccd.residence_no,
ccd.office_no,id.customer_id,cid.manufacturer,cid.model,cid.model_year,
cid.vin_no,cid.renewal_insurance_date,cid.insurance_company,
cid.cr_no,cid.inhouse_outside,cid.sales_consultant_name,
cid.sales_consultant_contact_no,cid.insurance_date,
cid.vehicle_registration_no
FROM customer_insurance_details cid
LEFT JOIN call_allotment_ref_admin admin
ON cid.customer_id = admin.customer_id
LEFT JOIN customer as cus
ON cid.customer_id = cus.customer_id
LEFT JOIN customer_contact_details as ccd
ON cid.customer_id = ccd.customer_id
WHERE admin.alloted_date IS NULL
AND cid.manufacturer='"+mf+"'
AND cid.renewal_insurance_date = '"+mnth+"'
limit "+pageNo+",100
此查询根据customer_insurance_details中的制造商和月份从客户,customer_insurance_details和customer_contact_details中获取记录。 加入客户和customer_contact_details。
还有一个表call_allotment_ref_admin,在表cutomer_insurance_details / call_allotment_ref_admin中有共同的customer_id,现在当我运行查询时,call_allotment_ref_admin中的客户不应该在customer_insurance_details中可见。
如果call_allotment_ref_admin和customer_insurance_details中有101个customer_id,那么当我将获取记录时,该客户不应该是可见的。
这是一个现有项目,我不允许在表格中添加或删除任何列,只需要优化查询并使结果更快获取。
如果您能就此提供一些相关信息,我将非常感谢。
客户
sl_noint(10) NOT NULL
customer_idvarchar(20) NOT NULL
customer_namevarchar(100) NULL
create_timedatetime NOT NULL
last_update_timedatetime NOT NULL
Customer_contact_details
sl_noint(10) NOT NULL
customer_idvarchar(20) NOT NULL
addressvarchar(400) NULL
cityvarchar(50) NULL
statevarchar(50) NULL
pin_codevarchar(15) NULL
countryvarchar(50) NULL
emailvarchar(200) NULL
mobile_novarchar(100) NULL
residence_novarchar(100) NULL
office_novarchar(100) NULL
create_timedatetime NOT NULL
last_update_timedatetime NOT NULL
vehicle_classvarchar(50) NULL
seating_capacityvarchar(50) NULL
new_emailvarchar(100) NULL
new_numbervarchar(50) NULL
cubic_capacityvarchar(50) NULL
special_conditionvarchar(200) NULL
lastyear_premiumvarchar(50) NULL
Customer_insurance_details
sl_noint(10) NOT NULL
customer_idvarchar(20) NOT NULL
vin_novarchar(50) NOT NULL
insurance_datevarchar(30) NULL
renewal_insurance_datevarchar(30) NULL
insurance_companyvarchar(100) NULL
service_adviser_idvarchar(100) NULL
idv_novarchar(50) NULL
premiumvarchar(50) NULL
claim_bonusvarchar(50) NULL
create_timedatetime NOT NULL
last_update_timedatetime NOT NULL
sales_consultant_namevarchar(100) NULL
sales_consultant_contact_novarchar(50) NULL
customer_typevarchar(50) NOT NULL
vehicle_registration_novarchar(50) NULL
manufacturervarchar(50) NULL
modelvarchar(200) NULL
model_yearvarchar(30) NULL
cr_novarchar(50) NULL
inhouse_outsidevarchar(50) NULL
cover_note_novarchar(50) NULL
variantvarchar(50) NULL
call_statusvarchar(50) NULL
service_advisor_namevarchar(70) NULL
service_advisor_contact_novarchar(50) NULL
accessories_typevarchar(50) NULL
accessories_valuevarchar(50) NULL
call_allotment_ref_admin
sl_noint(50) NOT NULL
user_idvarchar(100) NULL
permission_levelvarchar(50) NULL
managerIdvarchar(100) NULL
customer_idvarchar(100) NULL
call_statusvarchar(70) NULL
alloted_datedate NULL
insurance_datevarchar(30) NULL
customer_namevarchar(100) NULL
addressvarchar(200) NULL
mobile_novarchar(50) NULL
residence_novarchar(50) NULL
office_novarchar(50) NULL
manufacturervarchar(70) NULL
modelvarchar(200) NULL
model_yearvarchar(30) NULL
vin_novarchar(100) NULL
insurance_companyvarchar(100) NULL
cr_novarchar(100) NULL
sales_consultant_namevarchar(100) NULL
sales_consultant_contact_novarchar(50) NULL
inhouse_outsidevarchar(50) NULL
create_timedatetime NULL
last_update_timedatetime NULL
alloted_call_idvarchar(50) NULL
ins_monthvarchar(50) NULL
答案 0 :(得分:1)
使用下面列出的指南,您可以在主表上创建索引,即' customer_insurance_details'在这种情况下。这可以帮助您减少查询的运行时间。因此,您的查询在不使用任何聚合函数并直接根据少量JOINS获取列的意义上进行了优化。所以我觉得Indexing是你唯一的选择。
有关创建索引的语法信息,您可以浏览本手册页: