【问题标题】:Comparing performance of SQL query vs Linq比较 SQL 查询与 Linq 的性能
【发布时间】:2013-01-13 21:43:12
【问题描述】:

关于使用 .NOT 搜索查询的问题。我很困惑哪个加载和处理 SQL 查询更快,我已经实现了 SQL Server 查询,即使我在 SQL Server 2012 中使用索引搜索,我的查询也变得更大且获取数据的速度变慢。

那么有什么方法可以让我的查询更快地使用 linq?

这是我的简单查询

SELECT
    counting 
FROM  
    xxxxxxx 
WHERE
   (Contains(BOOLEANTEXT, '"FORM"')) 
   AND ((Contains(BOOLEANTEXT, ' "FORM"  and  "WARRANT" ' ))) 
   AND ((Contains(BOOLEANTEXT, ' "RETURN"  or  "RESPECTING"  or  "ELECTION"  or  "EXPENSES" ')))  
   OR ((Contains(BOOLEANTEXT, 'Near((FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES), 1000, TRUE)' ))) 
   AND ((Contains(BOOLEANTEXT, 'FORMSOF(INFLECTIONAL, FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES)' ))) 
   AND ((Contains(BOOLEANTEXT, 'FORMSOF(THESAURUS, FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES)' ))) 
ORDER BY 
   FORMTITLE ASC

【问题讨论】:

    标签: sql performance linq


    【解决方案1】:

    不,使用LINQ 无法提高此查询的性能。

    使用LINQ 时甚至会有一点开销,但在这种情况下肯定可以忽略。

    LINQ 最终也会产生SQL 并在您的数据库上执行它。所以LINQ 不会提供任何性能优势。

    如果你想提高性能,你必须改进这个SQL-statement 本身。

    查看您的 WHERE 子句,没有括号可以将任何 AND 组合到单个 OR。这是故意的吗?您的结果现在将满足所有 AND-conditions OR ((Contains(BOOLEANTEXT, 'Near((FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES), 1000, TRUE)' )))

    这可能会给您带来比您预期更多的结果。


    更多关于 ANDOR 的内容。

    您的WHERE-clause 现在类似于:

    (condition1 AND condition2 AND condition3 AND condition5 AND condition6)
    OR condition4
    

    我想,你的意思实际上是这样的:

    condition1 AND condition2
    AND (condition3 OR condition4)
    AND condition5 AND condition6
    

    我不说你的WHERE-clause 是错误的。我只是怀疑你需要一些额外的括号,才能得到你想到的WHERE-clause。

    但在添加括号之前,让我们删除一些以提高可读性。这将与您的相同:

    WHERE
       Contains(BOOLEANTEXT, '"FORM"')
       AND Contains(BOOLEANTEXT, ' "FORM"  and  "WARRANT" ')
       AND Contains(BOOLEANTEXT, ' "RETURN"  or  "RESPECTING"  or  "ELECTION"  or  "EXPENSES" ')
       OR Contains(BOOLEANTEXT, 'Near((FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES), 1000, TRUE)') 
       AND Contains(BOOLEANTEXT, 'FORMSOF(INFLECTIONAL, FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES)') 
       AND Contains(BOOLEANTEXT, 'FORMSOF(THESAURUS, FORM,WARRANT,RETURN,RESPECTING,ELECTION,EXPENSES)')
    

    【讨论】:

    • 感谢您的回复,我只是想知道如何改进我的查询。顺便说一句,您是否建议删除 OR 条件,因为如果我使用 OR 条件,它会返回更多结果。
    • 我在回答中添加了一些说明。希望对您有所帮助。
    • 太好了,,, 谢谢....这对我帮助很大,节省了很多时间.. 祝你有美好的一天
    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2019-01-28
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多