Недавно я обнаружил, что на одном из серверов есть высокий трафик ввода-вывода на диске. Высокий ввод-вывод из-за написания индекса на определенной таблице после некоторой диагностики. Я сделал несколько тестов оценки и обнаружил, что mysql занимает большое количество записей при вставке записей в таблицу с большим индексом.Производительность вставки ухудшается с большим индексом (MYSQL)
Тип данных индексированных столбцов - это varchar (15) и varchar (17), оба являются неидеальными индексами , но есть только 80 записей на диске, если я загружаю 20000 записей в таблицу, которая имеет 10000 записей, тогда как есть 1700 пишет на диске, когда таблица вырастает до 20 миллионов (что получило около 1 миллиона различных значений в индексированных столбцах) даже количество вставленных записей одинаково.
Двигатель MyISAM.
Увеличивает размер индексов, увеличивая также число записей на диске для каждой вставки.
Это поведение индекса BTREE и как я могу решить эту проблему?
Благодарим за ответ, есть ли другой способ уменьшить ввод-вывод при записи индекса, поскольку таблица находится в рабочей среде и не предпочитает менять его движок. Кроме того, дорогостоящий ввод-вывод - это характер BTREE или любая причина такого обстоятельства. – Holylai
Большое спасибо за то, что вы ясно объясните, что означает ввод-вывод из-за операции по расщеплению узлов при переполнении листового узла, и это дорого стоит, когда дерево растет?Поскольку я не совсем понимаю алгоритмы B-дерева, это поведение добавляется ко всем rdbms, таким как ORACLE (несмотря на ввод/вывод в буфере) – Holylai
Я получил его, большое спасибо, но почему первичный индекс не вызывает такой проблемы? – Holylai