Perlで下記のような構造を持つ配列があります。

@array = ({
            id => '1',
           key => 'a'
          },
          {
            id => '2',
           key => 'b'
          },
          {
            id => '4',
           key => 'c',
        })

ここで、@arrayid=4が存在するかどうかを調べる際、例えば

foreach my $x (@array){
  if($x->{id} == 4) ...
}

等として調べることが可能ですが、これでは処理回数が線形的に増え、効率的とは言えません。
何かピンポイントでid=4を調べる良い方法は無いでしょうか。
教えてください。よろしくお願いします。