При обновлении значения столбца в SQLite происходит повторная обработка других столбцов в этой строке, что повышает эффективность использования нескольких таблиц? (1 против 2 таблиц) - PullRequest
0 голосов
/ 11 июля 2020

Этот вопрос о том, как достичь максимально возможной производительности с SQLite.

Если у вас есть таблица с одним столбцом, который вы обновляете очень часто, и другим столбцом, который вы обновляете очень редко, лучше ли разделить эту таблицу на 2 разные таблицы, так что у вас будет 2 таблицы с 1 столбцом (исключая первичный ключ) каждая, вместо 1 таблицы с 2 столбцами (исключая первичный ключ) каждая?

Я пытался найти информацию об этом в документации SQLite, но я не смог найти объяснения того, что именно происходит при обновлении одного столбца одной строки таблицы. Ближайший ответ на мой вопрос, который я нашел, был следующий:

Во время части обработки SQLite INSERT и SELECT полное содержимое каждой строки в базе данных кодируется как один BLOB. Таким образом, параметр SQLITE_MAX_LENGTH также определяет максимальное количество байтов в строке.

(Цитируется отсюда: https://www.sqlite.org/limits.html)

Для меня это звучит как если каждая строка внутри хранится как один большой объект из всех столбцов, и это будет означать, что обновление одного столбца строки действительно приведет к внутренней перекодировке всей строки, включая все остальные столбцы этой строки, даже если они не были изменены в рамках ОБНОВЛЕНИЯ. Но я не уверен, правильно ли я понимаю это предложение, которое я процитировал.

Я думаю о случае, когда у вас есть один столбец, в котором хранится какой-то большой двоичный объект размером в несколько МБ, и другой столбец, в котором хранится некоторое целое число. Столбец с большим двоичным объектом может обновляться только один раз в месяц, а столбец с целым числом может обновляться раз в секунду. Насколько я в настоящее время понимаю, основываясь на этой цитате, кажется, что обновление целого числа один раз в секунду приведет к повторному перекодированию нескольких МБ большого двоичного объекта каждый раз, когда вы обновляете целое число, и это было бы очень неэффективно. Тогда было бы намного лучше иметь одну таблицу для большого двоичного объекта и другую таблицу для целого числа.

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