首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的“选择[值]”与“从[表]限制1中选择[值]”

问MySQL中的“选择[值]”与“从[表]限制1中选择[值]”
EN

Stack Overflow用户
提问于 2021-07-12 18:06:30
回答 3查看 473关注 0票数 0

哪个查询更好?

  • SELECT true;
  • SELECT true FROM users LIMIT 1;

在以下方面:

最佳practice

  • Performance

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-12 18:37:16

第一个查询的开销较小,因为它不引用任何表。

代码语言:javascript
复制
mysql> explain select true\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: NULL
   partitions: NULL
         type: NULL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
     filtered: NULL
        Extra: No tables used

而第二个查询确实引用了一个表,这意味着它必须花费时间:

检查表是否存在,如果查询引用任何列,请检查您的用户有权限读取table.

  • Acquiring元数据锁的列table.

  • Acquiring,因此在查询读取时没有人执行任何DDL或锁表。

  • 开始执行索引扫描,尽管它将被限制缩短。

下面是用于比较的第二个查询的解释:

代码语言:javascript
复制
mysql> explain select true from mysql.user limit 1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: user
   partitions: NULL
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 276
          ref: NULL
         rows: 8
     filtered: 100.00
        Extra: Using index
票数 4
EN

Stack Overflow用户

发布于 2021-07-12 18:13:36

第一次查询将有一行值为true。第二个查询将返回users表中的所有行,但只返回true值。

因此,如果您需要一行用户第一次查询。但是,如果需要具有相同值的所有行,则使用第二个行。

票数 1
EN

Stack Overflow用户

发布于 2021-07-12 18:35:17

在这两种情况下,显然您都想要TRUE的值:)基于这一意图,"SELECT TRUE“是最有效的,因为它不会导致MySQL进一步查找users表,不管其中有多少行,如果有行,则进一步使用”限制1“!

关于最佳实践这个术语,我不知道你在这里的意思,因为在我看来,这甚至不需要实践,更不用说最好的实践了,因为我看不到这种方法在实际生活中的任何应用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68352071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档