2014-11-24 3 views
2

Im новое для использования MySQL.Выполнение SQL-запросов с помощью JOINs на больших наборах данных

Im пытается запустить внутреннее соединение запроса, между базой данных 80000 (это таблица B) записи против 40GB набора данных с приблизительно 600million записей (это таблица A)

ли Mysql подходит для выполнения этой вид запроса? Какой вид времени я должен ожидать?

Это код, который приведен ниже. Однако это не удалось, так как мое соединение dbs завершилось с ошибкой через 60000 секунд.

set net_read_timeout = 36000; 


INSERT 
INTO C 
SELECT A.id, A.link_id, link_ref, network, 
date_1, time_per, 
veh_cls, data_source, N, av_jt 
from A 
inner join B 
on A.link_id = B.link_id; 

Im начинает смотреть на путь к вырубке размера таблицы 40GB на временную таблицу, чтобы попытаться сделать запрос более manageabe. Но я получаю код

Ошибка: 1206. Общее количество блокировок превышает размер таблицы блокировки 646,953 сек

Я на правильном пути? ура!

мой код для разделения базы данных является:

LOCK TABLES TFM_830_car WRITE, tfm READ; 
INSERT 
INTO D 
SELECT A.id, A.link_id, A.time_per, A.av_jt 
from A 
where A.time_per = 34 and A.veh_cls = 1; 
UNLOCK TABLES; 

Возможно, мои индексов таблицы в правильно все у меня есть простой первичный ключ

CREATE Table A 
(
id int unsigned Not Null auto_increment, 
link_id varchar(255) not Null, 
link_ref int not Null, 
network int not Null, 
date_1 varchar(255) not Null, 
#date_2 time default Null, 
time_per int not null, 
veh_cls int not null, 
data_source int not null, 
N int not null, 
av_jt int not null, 
sum_squ_jt int not null, 


Primary Key (id) 
); 


Drop table if exists B; 
CREATE Table B 
(
id int unsigned Not Null auto_increment, 
TOID varchar(255) not Null, 
link_id varchar(255) not Null, 
ABnode varchar(255) not Null, 

#date_2 time not Null, 

Primary Key (id) 

); 

С точки зрения схемы, это просто эти две две таблицы (A и B) загружаются под базу данных

+2

"против 40GB набора данных". Сколько записей? правильно ли индексируются ваши таблицы? –

+0

80k записей кажется довольно низким для такого количества данных, что вы там храните, XML-дампы, двоичные файлы изображений? –

+0

Вероятно, вы можете обойти ошибку, выбрав из подзапроса (производную таблицу), но это не повлияет на производительность. Отправьте свою схему и некоторые примеры данных для дальнейшей помощи. –

ответ

0

спасибо за помощь.

Индексация, похоже, решила проблему. Мне удалось сократить время выполнения запросов от 700secs до APROX 0.2secs на запись путем индексации на:

A.link_id

т.е. от

from A 
inner join B 
on A.link_id = B.link_id; 

нашел это действительно полезную почту. v полезно для newbe как сам

http://hackmysql.com/case4

код, используемый для индекса был:

CREATE INDEX linkid_index ON A(link_id); 
Смежные вопросы