我在一个包含大量条目的表上查询,我试图提高性能。
以下哪个SQL查询将具有最佳性能?
我应该使用IN
:
select * from employee where id in (2,3,4,5)
或者我应该使用OR
select * from employee where id=2 or id=3 or id=4 or id=5
哪种说法在绩效方面更有效?
答案 0 :(得分:3)
IN
运算符实际上是由SQL Server查询优化器互操作/翻译为OR
运算符。
例如我在我的Sql Server 2012实例上有Northwind数据库我使用IN
运算符编写了以下两个查询,另一个使用OR
运算符编写。
SELECT *
FROM dbo.Customers
WHERE CustomerID IN ('ALFKI','BLAUS','BONAP')
GO
SELECT *
FROM dbo.Customers
WHERE CustomerID = 'ALFKI'
OR CustomerID = 'BLAUS'
OR CustomerID = 'BONAP'
GO
两个查询的执行计划完全相同;
查询优化器使两个查询完全相同,IN
运算符被评估为OR
运算符。
要提高查询效果,您需要开始寻找问题与IN
或OR
运算符无关的问题,只需确保不要将IN
与子OR
一起使用-query可能会产生NULL,因为它也将被评估为WHERE Column = NULL
运算符,当我们有一个表达式var inquirer = require("inquirer");
function runInquirer(choices) {
inquirer.prompt([
{
type: "checkbox",
message: "Select toppings",
name: "toppings",
choices: choices
}
], function( answers ) {
console.log( JSON.stringify(answers, null, " ") );
});
}
时它会产生NULL,因此你会得到错误/意外的结果。