Будет ли код запроса Linq в проекте CW UWP работать медленнее или быстрее в зависимости от порядка его частей? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть этот общий вопрос, чтобы знать, может ли запрос базы данных SQLite с использованием Linq быть быстрее или медленнее в зависимости от порядка его частей.

Допустим, у меня есть таблица БД с несколькими пользовательскими данными.

Если я напишу что-то вроде этого:

var Query = DB_List.Where(TableName => TableName.UserId == UserId &&
                                       TableName.SomeValue == SomeValue);

Будет ли он быстрее, чем:

var Query = DB_List.Where(TableName => TableName.SomeValue == SomeValue &&
                                       TableName.UserId == UserId);

с учетом того, что могут быть тысячи идентификаторов пользователя ??

Лично я думаю, что может быть лучше сначала определить текущие записи UserId, а затем проверить их на предмет значения, которое мы ищем, но, возможно, это не имеет значения.

1 Ответ

0 голосов
/ 06 сентября 2018

Вопрос скорее в самом SQLite, чем в UWP. Единственное, что делает в этом случае UWP - это переводит запрос LINQ в запрос SQL, который отправляется в базу данных. В этом случае это будет что-то вроде:

SELECT * FROM MyTable WHERE SomeValue == @someValue AND UserId = @userId

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

Создание индекса в SQLite аналогично любой другой базе данных:

CREATE INDEX idxUserId ON MyTable (UserId);

Вы можете даже включить несколько столбцов:

CREATE INDEX idxUserIdSomeValue ON MyTable (UserId, SomeValue);

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

Для получения дополнительной информации об индексах SQLite см. эту замечательную статью Джейсона Файнштейна .

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