mysql内连接需要永远运行

时间:2014-11-14 10:30:46

标签: mysql query-performance

我无法让这个联接运行。我使用的是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         = ''

1 个答案:

答案 0 :(得分:0)

我认为您需要postcodepremises中的所有空格。 (如果不是,你可以删除它们)

我的建议是,您复制这些列(即postcode_nospacepremises_nospace)并使用相同的内容填充它们,但不能使用空格。然后,您必须创建一个触发器来更新这些字段。

此解决方案打破了标准化规则,它将减慢创建和更新操作的速度。

您也可以尝试创建VIEW。也许它会优化查询,但我不会指望它。