КОЛИЧЕСТВО (идентификатор) по сравнению с количеством (*) в MySQL

В модуле Perl Вы иногда хотите создать подпрограммы или закрытия на лету. Вещь, это, как только Вы создали подпрограмму, как пройти она. Вы могли просто назвать его, но тогда если подпрограмма использует caller() , это не будет столь полезно, как это могло быть. Это - то, где goto &subroutine изменение может быть полезным.

Вот быстрый пример:

sub AUTOLOAD{
  my($self) = @_;
  my $name = $AUTOLOAD;
  $name =~ s/.*:://;

  *{$name} = my($sub) = sub{
    # the body of the closure
  }

  goto $sub;

  # nothing after the goto will ever be executed.
}

можно также использовать эту форму goto для обеспечения элементарной формы оптимизации последнего вызова.

sub factorial($){
  my($n,$tally) = (@_,1);

  return $tally if $n <= 1;

  $tally *= $n--;
  @_ = ($n,$tally);
  goto &factorial;
}

(В [1 119] версия 16 Perl 5, которая была бы лучше записана как [1 120] goto __SUB__; )

существует модуль, который импортирует tail модификатор и тот, который импортирует recur , если Вам не нравится использовать эту форму [1 123] goto .

use Sub::Call::Tail;
sub AUTOLOAD {
  ...
  tail &$sub( @_ );
}

use Sub::Call::Recur;
sub factorial($){
  my($n,$tally) = (@_,1);

  return $tally if $n <= 1;
  recur( $n-1, $tally * $n );
}

большинство других причин использовать goto лучше сделано с другими ключевыми словами.

Как [1 124] redo луг немного кода:

LABEL: ;
...
goto LABEL if $x;
{
  ...
  redo if $x;
}

Или идущий в last из небольшого количества кода от нескольких мест:

goto LABEL if $x;
...
goto LABEL if $y;
...
LABEL: ;
{
  last if $x;
  ...
  last if $y
  ...
}

21
задан James Simpson 8 November 2009 в 16:56
поделиться

2 ответа

Взгляните на Count (*) vs Count (col) на www.mysqlperformanceblog.com, они обсуждают эту тему для различных типов 'col' (NOT NULL или нет, с индексом и т.д.) и это для таблиц MyISAM и InnoDB.

19
ответ дан 29 November 2019 в 21:49
поделиться

Я знаю, что вопрос касается MySQL, но, что бы он ни стоил, для Oracle рекомендуется count (*): это показывает, что это специфично для базы данных (см. Комментарий BalusC выше). Поскольку во многих базах данных (MS-SQL, MySQL) есть таблицы информационных схем, которые содержат различные типы метаданных, неизбежны различия, если один синтаксис просто ищет легко доступное значение, а другой идет прямо к таблице. . В конце концов: попробуйте разные варианты, посмотрите, что EXPLAIN говорит вам, что происходит за кулисами.

2
ответ дан 29 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: