以下查询在针对SQL Server CE数据库运行sql时运行速度非常慢,我原本希望将其转换为linq for EF。任何人都可以建议,我还没有在SQL Server CE上创建任何索引。表2有100,000行。
SELECT
*
FROM
Table1 T1a
WHERE
EXISTS
(
SELECT
NULL
FROM
Table2 T2
JOIN Table1 T1b ON T2.Field1 = T2.Field1
WHERE
T2.SomeID = 12345 AND
T1a.SomeString = T1b.SomeString
)
ORDER BY
T1a.SomeString,
T1a.AnotherString
答案 0 :(得分:1)
仅考虑所提供的信息。
对我而言T2.SomeID
将是一个以索引开始的最明显的地方。之后,您可能会查看T2.Field1
,因为它在连接中使用(可能T1.Field1
,具体取决于T1
中的行数)。下一个可能是T1.SomeString
,因为它的比较用法,因为它被用于排序。
除了T2.SomeID
之外,它取决于数据的构成,每个值的基数,表中的行数,有多少其他查询。将完成多少更新与查找等等。