這是我在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