Какой запрос лучше?

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

С точки зрения:

  • Лучшая практика
  • Производительность
0
Mohamed Waleed 12 Июл 2021 в 21:06

3 ответа

Лучший ответ

У первого запроса меньше накладных расходов, поскольку он не ссылается ни на какие таблицы.

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

В то время как второй запрос ссылается на таблицу, а это значит, что ему нужно потратить время:

  • Убедитесь, что таблица существует, и если запрос ссылается на какие-либо столбцы, убедитесь, что столбцы существуют.
  • Проверка того, что у вашего пользователя есть права на чтение этой таблицы.
  • Получение блокировки метаданных, чтобы никто не выполнял никаких DDL или LOCK TABLES, пока ваш запрос их читает.
  • Начинаем сканирование индекса, даже если оно будет прервано LIMIT.

Вот объяснение второго запроса для сравнения:

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
Bill Karwin 12 Июл 2021 в 18:39

Первый запрос будет одной строкой со значением true. Второй запрос вернет все строки из таблицы пользователей, но истинно как единственное значение.

Итак, если вам нужен первый запрос пользователя строки. Но если вам нужны все строки с одинаковым значением, используйте вторую.

1
Kazi Mohammad Ali Nur 12 Июл 2021 в 18:13

В любом случае очевидно, что вам нужно значение TRUE :) С этой целью "SELECT TRUE" является наиболее эффективным, так как это не заставит MySQL продолжать поиск таблицы пользователей, независимо от того, сколько в ней строк. , а затем пойти еще дальше с "LIMIT 1", если есть строки!

Под термином ЛУЧШАЯ ПРАКТИКА я не совсем понимаю, что вы здесь имели в виду, потому что, с моей точки зрения, это даже не требует ПРАКТИКИ, не говоря уже о ЛУЧШЕЙ ПРАКТИКЕ, поскольку я не вижу никакого реального применения этого подхода.

1
Broken Arrow 12 Июл 2021 в 18:35