【发布时间】:2014-12-13 02:48:35
【问题描述】:
这是我在 stackoverflow 中的第一个问题,我很高兴成为这个社区的一员,因为它帮助了我很多次。
我不是 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
如果能收到任何可以帮助我的答案,我将不胜感激。非常感谢, 丹妮。
【问题讨论】:
-
缺少主键可能会导致性能缓慢。