C# UWP 项目中的 Linq 查询代码的运行速度是更慢还是更快,具体取决于其各部分的顺序?



>我有一个一般性的问题,想知道使用 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记录,然后检查它们是否有我们寻找的价值,但也许这没有区别。

这个问题是关于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的这篇精彩文章。

最新更新