Нарушение производительности между использованием строки с данными GUID или int для таблицы SQLite с 20000 строк на телефоне? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть приложение, которое в настоящее время использует строку, заполненную GUID для столбца PrimaryKey в таблице SQLite с 20 000 строками:

public class Phrase
{
    [PrimaryKey, NotNull]
    public string PhraseId { get; set; }
    public int PhraseNum { get; set; }
    ...
}

Мой вопрос, для телефонного приложения, как вы думаете, это будетбудет хорошей идеей не использовать PhraseId, который в настоящее время является GUID, и вместо этого использовать PhraseNum в качестве PrimaryKey?Обратите внимание, что я довольно часто ищу PhraseId.

enter image description here

1 Ответ

1 голос
/ 27 сентября 2019

Как правило, было бы лучше использовать число, а еще лучше сделать его псевдонимом строки.

Данные для таблиц строк хранятся в виде структуры B-Tree, содержащей одну записьдля каждой строки таблицы, используя значение rowid в качестве ключа.Это означает, что получение или сортировка записей по rowid выполняется быстро.Поиск записи с определенным идентификатором строки или для всех записей с идентификаторами строк в указанном диапазоне выполняется примерно вдвое быстрее, чем аналогичный поиск, выполняемый путем указания любого другого PRIMARY KEY или индексированного значения.

ROWID и INTEGER PRIMARY KEY

Вероятно, у вас все еще будет индекс (если столбец UNIQUE будет автоматически генерировать индекс).

Таким образом, по всей вероятности, вам будет лучшеиспользуя: -

public class Phrase
{
    [PrimaryKey, NotNull]
    public int PhraseNum { get; set; }
    public string PhraseId { get; set; }

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