Как повысить производительность запросов INSERT/UPDATE в MyISAM

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

К вашему сведению, основная таблица разделена на KEY на 20 разделов.

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

показывать индексы из inf_articles_details; введите здесь описание изображения

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

показывать индексы из temp_inf_articles_details; введите здесь описание изображения

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

объяснить выберите * из inf_articles_details введите здесь описание изображения

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

объяснить выберите * из temp_inf_articles_details введите здесь описание изображения

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

CREATE TABLE inf_articles_details (
ard_ean_code bigint(20) unsigned NOT NULL,
ard_provider_reference bigint(20) unsigned DEFAULT NULL,
ard_reference varchar(20) NOT NULL,
ard_modified_date datetime DEFAULT NULL,
ПЕРВИЧНЫЙ КЛЮЧ (ard_ean_code),
КЛЮЧ idx_ard_modified_date (ard_modified_date)
) ENGINE=MyISAM НАБОР ПО УМОЛЧАНИЮ = utf8 /*!50100 РАЗДЕЛ ПО КЛЮЧУ () РАЗДЕЛЫ 20 */

Структура временной таблицы (temp_inf_articles_details) (около 70+ столбцов)

CREATE TABLE temp_inf_articles_details (
tard_ean_code bigint(20) unsigned NOT NULL,
tard_provider_reference bigint(20) unsigned DEFAULT NULL,
tard_status tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY ( tard_ean_code),
КЛЮЧ idx_status (tard_status)
) ENGINE=MyISAM CHARSET ПО УМОЛЧАНИЮ=utf8

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

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

Спасибо.


person Niranjan    schedule 05.01.2012    source источник
comment
Этот вопрос слишком общий, чтобы получить правильный ответ. Вы можете получить замедление, если вы читаете строки по одной (а не все за раз), или если вы предпочитаете отдельные вставки (вместо нескольких вставок), или если выполняете манипуляции с вашим (медленным) языком клиента...   -  person Álvaro González    schedule 05.01.2012
comment
Извините, что не включил подробную информацию в мой первый пост. Я включил необходимую информацию.   -  person Niranjan    schedule 05.01.2012


Ответы (1)


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

Ссылка: Массовые данные для таблиц MyISAM

параллельные вставки

Надеюсь, это поможет как-то

person Sudhir Bastakoti    schedule 05.01.2012