1

我有这个一般性的问题,想知道使用 Linq 的 SQLite db 查询是否可能更快或更慢,具体取决于它的部分顺序。

假设我有一个包含多个用户数据的数据库表。

如果我写这样的东西:

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

它会比:

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

考虑到可能有成千上万的用户 ID?

我个人认为最好先识别当前的 UserId 记录,然后检查它们是否有我们要寻找的价值,但也许这并没有什么不同。

4

1 回答 1

0

这个问题是关于 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 索引的更多信息,请参阅Jason Feinstein 的这篇精彩文章

于 2018-09-06T19:05:29.370 回答