将 SELECT COUNT 优化为 EXISTS

Optimizing SELECT COUNT to EXISTS(将 SELECT COUNT 优化为 EXISTS)
本文介绍了将 SELECT COUNT 优化为 EXISTS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个查询要从表中查找某些客户.

I have a query to find certain customers from a table.

SELECT COUNT(*)
  FROM CUSTOMER
 WHERE amount <> 0
   AND customerid = 22

customerid 上有一个索引,所以数据库会扫描 customerid = 22 的所有行.

There is an index on customerid, so the DB scans all rows with customerid = 22.

由于结果是通过检查计数返回零还是大于零来处理的,我该如何优化查询?IE.这样,在金额 <> 0 的第一个客户行,查询返回 0,否则如果所有行都 = 0,则返回 1.

Since the result is processed by checking whether the count returns zero or more than zero, how can I optimize the query? I.e. such that at the first customer row with amount <> 0 the query returns 0 else if all rows are = 0, then return 1.

推荐答案

select case
         when exists (select *
                      from   customer
                      where  amount <> 0
                             and customerid = 22) then 1
         else 0
       end  as non_zero_exists

这篇关于将 SELECT COUNT 优化为 EXISTS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)