2012-01-05 3 views
3

Я работаю с базой данных MySQL и имеет две таблицы MyISAM 1. Таблица Master (inf_article_details), имеющая более 10 миллионов записей и 2. Таблица временного (temp_inf_article_details), имеющая около 50 000 + записей. Структура этих таблиц одинакова, и они имеют только один столбец (BIGINT как тип данных) в качестве первичного ключа. Данные заполняются во временную таблицу от разных поставщиков источников данных на периодической основе, и у меня есть запланированное задание, которое перемещает данные из временной таблицы в главную таблицу.Как повысить производительность запросов INSERT/UPDATE в MyISAM

FYI, главная таблица разбивается на ключе в 20 разделов

Индекса Информация о мастер-таблице (inf_articles_details), как показано ниже:

шоу индексов от inf_articles_details; enter image description here

информации об индексе временной таблицы (temp_inf_articles_details), как показано ниже:

показывают индексы от temp_inf_articles_details; enter image description here

Объясните результат мастер-таблицы, как показано ниже:

объясняют выбор * от inf_articles_details enter image description here

Объясните результат временной таблицы, как показано ниже:

объяснить выберите * from temp_i nf_articles_details enter image description here

Мастер таблицы (inf_articles_details) структура (существует около 70+ столбцов в общей сложности)

inf_articles_details CREATE TABLE (
ard_ean_code BigInt (20) без знака NOT NULL,
ard_provider_reference BIGINT (20) unsigned DEFAULT NULL,
ard_reference varchar (20) NOT NULL,
ard_modified_date даты и времени DEFAULT NULL,
PRIMARY KEY (ard_ean_code)
KEY idx_ard_modified_date (ard_modified_date)
) ДВИГАТЕЛЬ = MyISAM DEFAULT CHARSET = utf8/*!50100 PARTITION BY KEY() перегородками 20 */

Временная таблица (temp_inf_articles_details) структура (существует около 70+ столбцов)

CREATE TABLE temp_inf_articles_details (
tard_ean_code BIGINT (20) без знака НЕ NULL, то
tard_provider_reference BIGINT (20) без знака УМОЛЧАНИЮ NULL, то
tard_status TINYINT (3) без знака NOT NULL DEFAULT '0',
PRIMARY KEY (tard_ean_code)
KEY idx_status (tard_status)
) ДВИГАТЕЛЬ = MyISAM DEFAULT CHARSET = utf8

в рамках задачи обновления данных, мы соединяем эти две таблицы по "ard_ean_code & tard_ean_code" и обновление существующие строки в главной таблице со значениями из временной таблицы и вставлять новые строки в мастер из временной таблицы. Но для этих обновлений данных требуется слишком много времени для вставки/обновления данных из временной таблицы в главную таблицу.

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

Спасибо.

+0

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

+0

Извините за не включая подробную информацию в моем первом сообщении. Я включил необходимую информацию. – Niranjan

ответ

1

MyISAM поддерживает параллельные вставки: если таблица не имеет свободных блоков в середине файла данных, вы можете ВСТАВИТЬ в нее новые строки одновременно с чтением других потоков из таблицы.

Ref: Bulk Data for MyISAM Tables

Concurent Inserts

Надеется, что это помогает в некотором роде

Смежные вопросы