Car*_*ngo 22 sql t-sql sql-server
我有查询从表中查找某些客户.
SELECT COUNT(*)
FROM CUSTOMER
WHERE amount <> 0
AND customerid = 22
Run Code Online (Sandbox Code Playgroud)
customerid上有一个索引,因此DB会扫描customerid = 22的所有行.
由于通过检查计数是返回零还是大于零来处理结果,我该如何优化查询?也就是说,在第一个客户行,金额<> 0,如果所有行都是= 0,则查询返回0,然后返回1.
Mar*_*ith 29
select case
when exists (select *
from customer
where amount <> 0
and customerid = 22) then 1
else 0
end as non_zero_exists
Run Code Online (Sandbox Code Playgroud)
关于customerid和金额的第一个索引
CREATE INDEX customer_idx ON customer(customerid, amount);
Run Code Online (Sandbox Code Playgroud)
然后将您的查询重写为
IF EXISTS (SELECT customerid
FROM customer
WHERE amount > 0 -- I am assuming here that amount cannot be a negative number.
AND customerid = 22)
SELECT 1
ELSE
SELECT 0
Run Code Online (Sandbox Code Playgroud)
这应该导致在customer_idx上寻找索引.否则,您需要扫描该客户的所有行(您的问题似乎意味着可能很多).
归档时间: |
|
查看次数: |
27146 次 |
最近记录: |