当前位置: 首页 > 面试题库 >

选择存在与限制1

龙欣德
2023-03-14
问题内容

我看到SELECT EXISTS了很多类似的东西:

    if db.query("""
        SELECT EXISTS (
            SELECT 1 FROM checkout
            WHERE checkout_id = %s
        )
    """ % checkout_id).getresult()[0][0] == 't':

与我的偏好:

    if db.query("""
        SELECT 1 FROM checkout
        WHERE checkout_id = %s
        LIMIT 1
    """ % checkout_id).getresult():

首选哪一个,为什么?

PS我正在使用Python和PosgreSQL。

cert=> explain SELECT EXISTS (SELECT 1 FROM checkout WHERE checkout_id = 3);
                                      QUERY PLAN                                      
--------------------------------------------------------------------------------------
 Result  (cost=4.03..4.03 rows=1 width=0)
   InitPlan
     ->  Index Scan using checkout_pkey on checkout  (cost=0.00..4.03 rows=1 width=0)
           Index Cond: (checkout_id = 3)
(4 rows)

cert=> explain SELECT 1 FROM checkout WHERE checkout_id = 3 limit 1;
                                     QUERY PLAN                                     
------------------------------------------------------------------------------------
 Limit  (cost=0.00..4.03 rows=1 width=0)
   ->  Index Scan using checkout_pkey on checkout  (cost=0.00..4.03 rows=1 width=0)
         Index Cond: (checkout_id = 3)
(3 rows)

我的观点是,为什么我可以从结果中获取一行并检查它的第一列是否为真,如果我只能检查是否有任何行,就意味着相同?


问题答案:

PostgreSQL似乎足够聪明,可以像在执行计划中清楚看到的那样对待这两个语句。

我对具有〜150000行的本地表进行测试并从条件中选择了〜100的本地表也显示了相同的行为

最重要的是:使用哪一个并不重要,但是您应该意识到其他DBMS可能不会以相同的方式运行。



 类似资料:
  • 问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-) ​

  • 我试图用vba做一个按钮来删除Excel表中的一行,但当我按下按钮并选择不止一行或许多单元格时,我想限制从E到I的选择(和行的数量无关)这里是我的代码,非常感谢,希望你能帮助我,我还没有找到任何类似的东西。

  • 问题内容: 我认为我要沿着这条路走正确的路…请忍受,因为我的SQL并不是最出色的 我试图查询数据库以从一个表中选择所有单元格中某些单元格不存在的所有内容。那没有多大意义,但我希望这段代码会 因此,基本上我有一张桌子,上面列出了员工及其详细信息。然后是另一个表,其中包含一些其他详细信息,包括其名称。在eotm_dyn表中没有名称的地方,这意味着它们没有条目,我想确切地知道它们是谁,或者换句话说,确切

  • 问题内容: 如果我只需要2/3列,而是查询而不是在select查询中提供这些列,那么关于更多/更少I / O或内存的性能是否会有所下降? 如果我确实选择了*,则可能会出现网络开销。 但是在选择操作中,数据库引擎是否总是从磁盘中提取原子元组,还是仅提取在选择操作中请求的那些列? 如果它总是拉一个元组,则I / O开销是相同的。 同时,如果它拉出一个元组,从元组中剥离请求的列可能会占用内存。 因此,在

  • 我不明白为什么cassandra一直在扫描我的表寻找其他结果(因此获取了很多墓碑),因为第一行匹配,我指定我只想要一行。 如果我没有指定限制,我可以理解警告。但是,当第一行与限制1匹配时,扫描整个表有什么意义呢?

  • 我在某人的iPython笔记本上看到了这段代码,我对这段代码的工作原理感到非常困惑。据我所知,pd.loc[]用作基于位置的索引器,其格式为: 然而,在这种情况下,第一个索引似乎是一系列布尔值。有人能给我解释一下这个选择是如何工作的吗?我试图通读留档,但我想不出一个解释。谢谢!