我无法让这个联接运行。我使用的是easyphp,mysql 5.6.2。 Windows 8机器。
表A = 150万行 表B = 80万行
我认为替换功能可能导致问题,但我还能做些什么来进一步优化它?
我已编入索引,每个人:
CREATE INDEX id_index ON lr_01c_compkey_v01_201411_ldpcs (urn);
CREATE INDEX pc_index ON lr_01c_compkey_v01_201411_ldpcs (postcode);
CREATE INDEX premises ON lr_01c_compkey_v01_201411_ldpcs (premises);
CREATE INDEX building ON lr_01c_compkey_v01_201411_ldpcs (building);
CREATE INDEX sub_building ON lr_01c_compkey_v01_201411_ldpcs (sub_building);
CREATE INDEX sub_build_code ON lr_01c_compkey_v01_201411_ldpcs (sub_build_code);
CREATE INDEX addi_info ON lr_01c_compkey_v01_201411_ldpcs (addi_info);
CREATE INDEX id_index ON ld_02c_compkey_v01_201411 (urn);
CREATE INDEX pc_index ON ld_02c_compkey_v01_201411 (postcode);
CREATE INDEX premises ON ld_02c_compkey_v01_201411 (premises);
CREATE INDEX building ON ld_02c_compkey_v01_201411 (building);
CREATE INDEX sub_building ON ld_02c_compkey_v01_201411 (sub_building);
CREATE INDEX sub_build_code ON ld_02c_compkey_v01_201411 (sub_build_code);
CREATE INDEX addi_info ON ld_02c_compkey_v01_201411 (addi_info);
这是查询:
SELECT *
FROM lr_01c_compkey_v01_201411_ldpcs a
INNER JOIN ld_02c_compkey_v01_201411 c
ON REPLACE(a.postcode,' ','') = REPLACE(c.postcode,' ','')
AND REPLACE(a.premises,' ','') = REPLACE(c.premises,' ','')
WHERE a.postcode <> '' AND
c.postcode <> '' AND
a.premises <> '' AND
c.premises <> '' AND
a.building = '' AND
a.sub_building = '' AND
a.sub_build_code = '' AND
a.addi_info = '' AND
c.building = '' AND
c.sub_building = '' AND
c.sub_build_code = '' AND
c.addi_info = ''
答案 0 :(得分:0)
我认为您需要postcode
和premises
中的所有空格。 (如果不是,你可以删除它们)
我的建议是,您复制这些列(即postcode_nospace
和premises_nospace
)并使用相同的内容填充它们,但不能使用空格。然后,您必须创建一个触发器来更新这些字段。
此解决方案打破了标准化规则,它将减慢创建和更新操作的速度。
您也可以尝试创建VIEW
。也许它会优化查询,但我不会指望它。