Что лучше с точки зрения производительности sqlite3: удалить ненужную строку или установить ее как не необходимую?

Я пишу приложение iPhone, где пользователь получает несколько сообщений от разных пользователей. Эти сообщения хранятся в базе данных sqlite3. Со временем пользователь может захотеть удалить полученные сообщения от одного пользователя, но, конечно же, он будет продолжать получать новые сообщения от этого пользователя после удаления старых.

Поскольку получение сообщений будет выполнено с помощью SELECT , какой сценарий лучше использовать, когда пользователь хотел бы удалить сообщения (с точки зрения производительности):

  1. DELETE все старые сообщения в обычном режиме и продолжайте извлекать новые, используя оператор, такой как: SELECT Messages FROM TableName WHERE UserID = (?)
  2. Добавьте поле в таблицу типа INTEGER и по запросу DELETE установите это поле в 1 и после этого получите новые сообщения с помощью оператора, такого как: SELECT Messages FROM TableName WHERE UserID = (?) AND IsDeleted = 0

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

Спасибо заранее.

3 Solutions collect form web for “Что лучше с точки зрения производительности sqlite3: удалить ненужную строку или установить ее как не необходимую?”

Использование сценария 1 намного лучше, поскольку как SELECT и DELETE в SQL работают на одном уровне скорости, и сценарий 1 предоставит вам не иметь свисающих кортежей (нежелательных строк) в вашей базе данных.

Если вы хотите выполнить резервное копирование данных после любого процесса удаления, так что сценарий 2 является обязательным, но вы должны учитывать растущий размер вашей базы данных, что в будущем приведет к более низкой производительности.

Наконец, я хотел бы добавить, что выполнение операций удаления в базе данных не вызовет каких-либо проблем с фрагментацией, поскольку большинство баз данных имеют фрагментацию и оптимизацию инструментов в своих механизмах.

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

ИМХО, если вы не используете DELETE, через некоторое время db будет становиться все больше и больше, что делает каждый SELECT менее эффективным и менее эффективным. поэтому я считаю, что удаление строк, которые никогда не будут использоваться снова, более эффективно.

  • Запрос Sqlite с вопросительным знаком
  • Sqlite FTS не работает при компиляции с LLVM на iOS
  • iPhone iOS: SQLite3 Не удалось получить последнее значение ID в таблице
  • Приложение iOS для судов с предварительно заполненной базой данных sqlite
  • libsqlite в симуляторе и компиляции iOS
  • Открытие и создание базы данных SQLite в Objective C
  • iOS - вставка SQLite, не вставляющая данные
  • sqlite 3 "Ошибка SQL" из памяти "(7)" objc
  • Обновление новой версии для магазина приложений с использованием другой структуры db sqlite
  • Как запросить внешнюю базу данных SQL - приложение для iPhone
  • Ошибка ввода / вывода Sqlite на iphone 5
  • Interesting Posts

    Кнопка навигации NavigationController не появляется до загрузки

    iOS – Логика для обнаружения iPad / iPhone устройства для раскадровки

    Сохранение уже созданных живых фотографий

    Проблемы с UIActivityItemProvider после совместного использования с AirDrop

    Приложение App Store для приложений App Store отклоняется производством APNS

    Приложение сбой в фоновом режиме при изменении разрешения – быстрый

    AppleLanguages ​​больше не возвращает все языки

    Незавершенный блок завершения UIPageViewController

    AFNetworking 2.0 как поместить некоторые параметры в строку запроса запроса POST

    Где инициализировать что-то еще в UIViewController

    Поддерживаемые платформы, базовый SDK, встроенная настройка активной архитектуры, восстановленная после обновления pod

    Как обрабатывать платежи без использования при покупке приложений в приложениях ios?

    (Cocoa error 3840.) "(Недопустимое значение вокруг символа 0.) AFNetworking

    Пропуски не включены в профиле настройки

    Пейзаж и портрет IPhone

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.