|
Заблокирован
|
||
Оптимальный по скорости выборки и объему вариант таблицы - обычная с ROWID или WITHOUT ROWID?06.08.2022, 22:04. Показов 686. Ответов 0
Метки нет (Все метки)
Из инфы по SQLite вынес,
что если есть возможность сделать первичный ключ таблицы целочисленным, то это хорошо - его можно определить известным способом и он станет псевдонимом ROWID. Тогда поиск по этому нашему первичному ключу будет идти быстро, поскольку данные будут по нему кластеризированы. То есть, будут физически храниться на диске упорядоченными по значению нашего ключа, поскольку он псевдоним ROWID, а данные в SQLite хранятся упорядоченными по ROWID (по внутреннему индексу). Если это не таблица WITHOUT ROWID. При этом, помимо ожидаемого быстрого поиска будет и экономия объема в силу того, что, если таблица с ROWID, то данные хранятся в B+ дереве, а не в B дереве (как в таблице WITHOUT ROWID). Отлично! Но! Читаю в одном популярном блоге прямо противоположную рекомендацию, имею ввиду прежде всего пункт №2, но и остальные тоже...:
У меня есть версия, что эти рекомендации нужно понимать так. Если "в таблицах хранятся строки с малыми значениями", то большого преимущества B+ дерева перед просто B деревом нет. И тогда вступают в силу факторы дополнительных издержек, связанных с наличием внутреннего индекса по ROWID и вот этот упомянутый "двойной поиск" (на самом деле не знаю, будет ли реально поиск двойным, для случая, когда целочисленный первичный ключ является псевдонимом? Есть сомнения, может быть в этом блоге автор ошибся?). Если это так, то каков критерий того, что строка таблицы имеет "малое значение"? Это эквивалентно тому, что в таблице много строк? Или что-то ещё? Поясню. Меня интересует случай, когда имеется таблица с очень большим числом строк (порядка нескольких сот миллионов). Первичный ключ планирую сделать целочисленным - его значение будет генериться в коде (для этого перевожу набор целочисленных и текстовых значений в целочисленные - о своему алгоритму). И тут не понятно, то ли использовать первичный ключ как псевдоним ROWID, то ли делать таблицу без ROWID, чтобы индекс по моему первичному целочисленному ключу был кластеризированным (но в этом случае будет B дерево, а не B+ дерево). Пытаюсь соптимизировать в первую очередь скорость выборки по первичному ключу. Объем - тоже, но во вторую очередь. P.S. То ли вообще сделать таблицу WITHOUT ROWID и использовать составной первичный ключ из набора столбцов типа INTEGER и TEXT. Вот тут полезная информация, но местами противоречит процитированному блогу. Только что нашел её, пока писал вопрос))) Не успел просмотреть подробно. Таки чему верить? Как быть? Добавлено через 7 минут Увидел сейчас, что есть такой критерий - если размер строки меньше 1/20 страницы, то строка маленькая по размеру. Для стандартной страницы в 1024 байта это всего 50 байт. Не много. У меня примерно 50 байт и будет) Может чуть меньше) Добавлено через 3 минуты Вообще, такое ощущение, что для лучшего соответствия стандартам SQL и следовательно для уменьшения возможной головной боли нужно использовать WITHOUT ROWID и STRICT (последнее уж точно). Ну, это с учетом того, что WITHOUT ROWID несколько ограничивает возможности - например, в них нельзя использовать некоторый функционал для типа BLOB.
0
|
||
| 06.08.2022, 22:04 | |
|
Ответы с готовыми решениями:
0
ROWID ResultSet.refreshRow() без RowId? В чем разница между UROWID и ROWID? |
| 06.08.2022, 22:04 | |
|
Помогаю со студенческими работами здесь
1
Ошибка rowid при объединений таблиц Первичный ключ типа INTEGER и ROWID - критерии совместимости Первичный ключ типа INTEGER как псевдоним ROWID Оптимальный вариант структуры БД Оптимальный вариант переустановки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|