1

SOでこのコードスニペットを見つけました。これは基本的に、MySQL の「row_number()」関数を偽造したものです。それは非常に高速に実行され、私はそれが好きで必要ですが、最後に where 句を付けることができません。

select 
   @i:=@i+1 as iterator, t.* 
from 
   big_table as t, (select @i:=0) as foo

追加するwhere iterator = 875とエラーになります。

上記のスニペットは、約 .0004 秒で実行されます。サブクエリとして別のクエリ内にラップできることはわかっていますが、非常に遅くなります。

select * from (
   select 
     @i:=@i+1 as iterator, t.* 
   from 
     big_table as t, (select @i:=0) as foo) t
where iterator = 875

上記のスニペットは、実行に 10 秒以上かかります。

とにかくこれをスピードアップするには?

4

2 に答える 2

2

この場合、LIMITを として使用できWHEREます。

select 
   @i:=@i+1 as iterator, t.* 
from 
   big_table as t, (select @i:=874) as foo
LIMIT 875,1

レコード 875 のみが必要なので、これは高速です。

于 2016-08-02T04:37:19.617 に答える