这是我在stackoverflow中的第一个问题,我很高兴成为这个社区的一员,因为它帮了我很多次。MySQL - 非常简单的加入时间太长
我不是SQL和MySQL的专家,但我正在一个需要大表(百万行)的项目中工作。 我在加入时遇到问题,我不明白为什么需要这么长时间。感谢提前:)
下面是表:
CREATE TABLE IF NOT EXISTS tabla_maestra(
id int UNIQUE,
codigo_alta char(1),
nombre varchar(100),
empresa_apellido1 varchar(150),
apellido2 varchar(50),
tipo_via varchar(20),
nombre_via varchar(100),
numero_via varchar(50),
codigo_via char(5),
codigo_postal char(5),
nombre_poblacion varchar(100),
codigo_ine char(11),
nombre_provincia varchar(50),
telefono varchar(250) UNIQUE,
actividad varchar(100),
estado char(1),
codigo_operadora char(3)
);
CREATE TABLE IF NOT EXISTS tabla_actividades_empresas(
empresa_apellido1 varchar(150),
actividad varchar(100)
);
这里是我想要做的查询:
UPDATE tabla_maestra tm
INNER JOIN tabla_actividades_empresas tae
ON (tm.nombre!='' AND tae.empresa_apellido1=tm.empresa_apellido1)
SET tm.actividad=tae.actividad;
这个查询的时间太长,并执行它之前,我是想以测试需要多长时间才能进行此简单查询:
SELECT COUNT(*) FROM tabla_maestra tm
INNER JOIN tabla_actividades_empresas tae
ON (tm.nombre!='' AND tae.empresa_apellido1=tm.empresa_apellido1);
它仍然需要太长时间,为什么。下面是我用的指标:
CREATE INDEX cruce_nombre
USING HASH
ON tabla_maestra (nombre);
CREATE INDEX cruce_empresa_apellido1
USING HASH
ON tabla_maestra (empresa_apellido1);
CREATE INDEX index_actividades_empresas
USING HASH
ON tabla_actividades_empresas(empresa_apellido1);
如果我使用EXPLAIN语句,这些结果如下:
http://oi59.tinypic.com/2zedoy0.jpg
我会如此感激收到任何答案,可以帮助我。非常感谢,丹妮。
主键的缺失可能会导致缓慢的perforanace。 – 2014-10-17 13:57:11