+ Ответить в теме
Показано с 1 по 3 из 3

Тема: SQLite3 оптимизация хранения

  1. #1
    dummy tonchikp is on a distinguished road
    Регистрация
    16.07.2016
    Адрес
    Россия
    Сообщений
    3
    Вес репутации
    0

    Question SQLite3 оптимизация хранения

    Уважаемые форумчане! Требуется ваша помощь!

    Есть таблица-словарь SQLite3, где перечисляется что-то (не важно что, суть не в этом)

    Ранее создавал так:
    Код :
    1. CREATE TABLE table (
    2.         id INTEGER PRIMARY KEY AUTOINCREMENT,
    3.         obj TEXT UNIQUE
    4. );
    Задумался, ведь тут по сути 3 поля с UNIQUE (rowid, id, obj), 2 с AUTOINCREMENT (rowid, id). Получается дублируются роли полей, выполняется возможно ненужная работа, нерациональность. Насколько я понимаю PRIMARY KEY в себе несёт UNIQUE и NOT NULL.

    Может лучше так:
    Код :
    1. CREATE TABLE table (
    2.     obj TEXT PRIMARY KEY
    3. ) WITHOUT ROWID;
    Подскажите пожалуйста, какие могут быть подводные камни нового подхода? Иными словами, какие минусы?

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Administrator Админ
    system architect
    AiK is on a distinguished road Аватар для AiK
    Регистрация
    13.02.2004
    Адрес
    СПб
    Сообщений
    2,298
    Вес репутации
    80

    По умолчанию Re: SQLite3 оптимизация хранения

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

    Кроме того, размеры полей типа TEXT и типа INTEGER существенно отличаются. Поэтому если БД не плоская, а реляционная и большого размера, то большинство выборок во втором случае будут происходит более быстро, т.к. больше значений уместится в оперативную память.

    А если таблица одна из нескольких сотен записей, то разницы не будет никакой.
    Даже самый дурацкий замысел можно воплотить мастерски

  4. #3
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: SQLite3 оптимизация хранения

    Сравнение интов имеет сложность O(1), строк - O(N).

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

    Идет вразрез с имеющейся практикой. Захочешь прицепить REST интерфейс например и обнаружишь что фреймворк хочет работать только с урлами вида http://myserver:8080/rest/table/10, а http://myserve:8080/rest/table/ДядяВася не катит и надо надо делать кучу работы руками вместо того чтобы заюзать какой-нибудь spring-data-rest-webmvc и сгенерировать методы GET/POST/PUT/PATCH/DELETE автоматически.
    2B OR NOT(2B) = FF

+ Ответить в теме

Похожие темы

  1. Оптимизация исходного кода С++
    Коллеги, кто интересуется оптимизацией исходного кода с точки зрения быстродействия, милости просим на Parserplus.com Постараюсь ответить на все...
    от AndrewPetrov в разделе C и C++
  2. оптимизация кода
    Часто слышу и вижу что-то вроде "можно упростить код" ну и т.д. Препод у меня вон постоянно говорит, как они раньше на машинах с 2к памяти...
    от un4-funeral в разделе Флейм.
  3. оптимизация кода
    от un4-funeral в разделе Алгоритмы
  4. Оптимизация ассемлерного кода
    С помощью инструкций Pentium_II и Pentium_Pro оптимизировать ассемблерной код: LEA AX PUSH DS PUSH AX XOR AL,00 OR CH, Может кто...
    от ASICS_36 в разделе Решите мне задачку
  5. Оптимизация кода
    здраствуйте, госпада, программеры...есть такая проблема..вот например кусочек кода If TextBox1.Value = 1 Then...
    от maximus-perec в разделе MS Office и VB(A).

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения