Вставка производительности для индекса UUID primary_key - PullRequest
0 голосов
/ 22 декабря 2019

Я прочитал, что производительность вставки для UUID в качестве primary_key зависит от того, сколько записей существует в базе данных. Чем больше записей занято, тем больше времени требуется для вставки записей.

https://kccoder.com/mysql/uuid-vs-int-insert-performance/

Автор вышеупомянутой статьи провел эксперименты, он считает, что это потому, что существует большее число операций чтения дляВставка UUID primary_key по сравнению с другими автоматически увеличиваемыми целыми числами.

Я хотел спросить, автоматически ли базы данных создают индекс для выбранного primary_key. Если индекс UUID primary_key является проблемой, будет ли проблема вставки решена с использованием целого числа какиндекс primary_key, сохраняя при этом поле UUID, а затем переключая первичные ключи на UUID, тогда проблема заключается в том, распространятся ли ссылки внешнего ключа на целочисленный идентификатор в поле UUID после переключения?

1 Ответ

0 голосов
/ 22 декабря 2019

, будут ли базы данных автоматически создавать индекс для выбранного первичного_ключа

Да. Первичные ключи всегда индексируются. В некоторых базах данных индекс является кластеризованным (то есть данные на страницах данных фактически сортируются по ключу). В других базах данных индекс должен обеспечивать ограничение уникальности.

Проблема с UUID и индексами заключается в том, что новые значения не обязательно больше, чем более старые значения. Это означает, что вставка обычно идет «между» двумя существующими записями. Когда это происходит, у вас есть фрагментация - то есть существующие страницы данных должны освободить место для новых записей, а иногда даже разделиться на две страницы.

У автоматически увеличенного целого числа нет этой проблемы. Он индексируется (и кластеризуется в MySQL). Однако более новые значения больше, чем любое существующее значение - определение автоинкремента. Итак, новые ценности идут в конце. Фрагментация является проблемой только при удалении строк или при установке значения вручную.

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

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