1

昨日、rand() による mysql クエリの順序付けについて質問がありました。そして、ここで良い答えを得ました: https://stackoverflow.com/a/16597706/2333744

答えのコードは以下です。

create temporary table results as
(Select *, @rn := @rn + 1 as rn, rand() as therand
from table1 inner join
  table2
  on table1.in = table2.in cross join
    (select @rn := 0) const
where table1.T = A
);

select *
from results
where therand < 1000/@rn
order by therand
limit 500;

を除くすべてを理解しています。

cross join (select @rn : = 0) const

これが何をしているのか、それが重要かどうかはわかりません。削除しても、パフォーマンスの変化はありません。この部分を理解できる人はいますか?

4

2 に答える 2

0

率直に言って、これは @rn 変数をリセットするだけです。2 つのクエリの実行を避けるために、select に「パック」されます。const は定数であることを意味するため、一度だけ評価されます。

それを削除して、単一のトランザクションにさらにクエリを追加すると、問題が発生する可能性があります。

よろしくお願いします

ゾルト

于 2013-05-17T17:09:49.743 に答える