Что лучше с точки зрения производительности 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 менее эффективным и менее эффективным. поэтому я считаю, что удаление строк, которые никогда не будут использоваться снова, более эффективно.

  • отладка заблокированной базы данных sqlite3
  • Параметры guarded_open_np
  • sqlite3_prepare_v2 / sqlite3_exec
  • Преобразование NSString в нижние регистры
  • ON DELETE CASCADE не работает в sqlite3 в ios
  • Как обращаться с несколькими потоками для доступа к sqlite3 с отсутствием dblocked error
  • Удалите несколько таблиц из одного запроса, разделив их с точки с запятой
  • как удалить ошибку ": NULL cString '"?
  • Процедура библиотеки SQLite3 вызвана из последовательности
  • Не удалось создать базу данных SQLite3 с защитой файлов в iOS
  • Обновление новой версии для магазина приложений с использованием другой структуры db sqlite
  • Interesting Posts

    Каково определение метода удобства в отношении цели C?

    Обработка приложенияDidBecomeActive – «Как контроллер просмотра может реагировать на то, что приложение становится активным?»

    Кроссфейд или буферизация трека с помощью Spotify iOS SDK

    Как объявить возможности устройства для этого приложения?

    Пропустить суперкласс при вызове супер метода?

    Консоль, заполненная <FIRInstanceID / WARNING> – Xcode 8 / iOS10

    Показывать те же точки интереса в MKMapView, что и в приложении «Карты»?

    Проблемы с UIKeyboardWillShowNotification с ios 11 beta 7

    Отчет о сбое, указывающий крах в строке 0?

    IOS – проверка подлинности токена в заголовках HTTP

    Загрузка файлов iOS – NSDocumentDirectory

    Клавиатура UIWebView при настройке body contenteditable на true

    Значок поиска UISearchBar не выравнивается влево в iOS7

    Свойство UITextView KeyboardAppearance для установки UIKeyboardAppearanceDark

    Получите CellID, MCC, MNC, LAC и сеть в iOS 5.1

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