2017-01-07 5 views
0

テーブルとのクロス結合を試みています。インラインクエリとストアドプロシージャの同じクエリの異なる実行

select u1.userid,u2.userid from users as u1 join users as u2 

このクエリをラインクエリと同じように書くと、0.183 secで実行されます。

しかし、同じクエリを後続の処理に使用するルーチンに入れていると、あまりにも多くの時間がかかります(approx 500-600 seconds)

CREATE DEFINER=root`@`localhost PROCEDURE Test_Cross_Join() 
BEGIN 
select u1.userid,u2.userid from users as u1 join users as u2; 
END 

実際には、実際には1回だけ実行され、それから私はおおよその時間を得ることができました。しかし、ほとんどの時間私はその手続きを呼び出そうとしましたが、私の"MySQL Workbench"は応答せず、強制的にシャットダウンしませんでした。ユーザーテーブルには16000 rowsが含まれています。インラインクエリの実行時間と実行時間を検索したところ、満足のいく回答が得られなかったのは、ほとんどの回答が時間差がないと言っているからです。私は、同じクエリの実行に、コードを一度変更することなく時間差がある理由を知りたいと思います。私はubuntu 16.04でmysqlバージョン5.7.16を使用しています。

答えて

0

最後に私は解決策を得ました。実際に問題は、インラインクエリの実行中に行が50000に制限されているため、すべての行が非常に簡単に表示されていましたが、ルーチン(ストアドプロシージャ) 16,000 * 16,000)の行が表示されませんでした。ストアドプロシージャの実行中にフェッチの実行時間が長すぎたため、強制終了しました。 この質問を投稿して間違った質問を投稿して申し訳ありません。とにかくおかげでみんな。

関連する問題