Самое быстрое выполнение MySQL, обновляющее единственное поле в единственной индексированной строке - PullRequest
1 голос
/ 17 октября 2011

Я пытаюсь получить максимальную производительность от приложения, которое обновляет индексированные строки, многократно заменяя данные в поле varchar.Это поле varchar будет обновлено данными равного размера при последующих обновлениях (поэтому одна строка никогда не будет расти).К моему полному замешательству, я обнаружил, что производительность напрямую связана с размером самого поля и не сравнится с производительностью прямой замены данных в файле файловой системы.т.е. на 1 кбайт размер поля на порядок быстрее, чем на 50 кбайт.(в пределах ограничения размера строки) Если строка существует в базе данных, а размер не изменяется, почему при обновлении возникают такие большие затраты?

Я использую innodb и отключил двоичное ведение журнала.Я исключил накладные расходы связи с использованием строк, созданных SQL.попытался использовать myisam, и это было примерно в 2-3 раза быстрее, но все еще слишком медленно.Я понимаю, что база данных имеет накладные расходы, но опять же я просто заменяю данные в одном поле данными, которые имеют одинаковый размер.что делает БД, кроме прямой замены битов?

грубый peformance # 81 обновлений / сек (строка 60 КБ) 1111 обновлений / сек (строка 1 КБ)

производительность файловой системы: 1428 обновлений /sec (строка 60k)

обновления, которые я делаю, вставляются ... при обновлении дубликата ключа.прямые обновления примерно на 50% быстрее, но все равно до смешного медлительные.

Могут ли какие-нибудь эксперты просветить меня?Есть ли способ улучшить эти цифры?

1 Ответ

0 голосов
/ 17 октября 2011

Я обратился с вопросом в DBA StackExchange относительно использования CHAR vs VARCHAR . Пожалуйста, прочитайте все ответы, а не только мои.

Имейте в виду еще кое-что. InnoDB имеет gen_clust_index, кластеризованный индекс внутреннего идентификатора строки для всех таблиц InnoDB, по одному на таблицу InnoDB . Если вы измените что-либо в первичном ключе, это даст gen_clust_index реальную тренировку для повторной регистрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...