1

私のテーブルtbltempには約9万のレコードがあります。列は次のとおりです: (主キーid、自動インクリメント) name、、、、、、、。qtypricestatusmod_datecreated_date

私のクエリは次のとおりです。

SELECT * 
 FROM tbltemp 
 WHERE qty > 3 
 ORDER By Rand() 
 LIMIT 50

実行には約 7 ~ 10 秒かかります。テーブルまたはクエリを最適化するにはどうすればよいですか?

4

3 に答える 3

0

あなたの質問で:

SELECT * FROM tbltemp WHERE qty > 3 ORDER By Rand() LIMIT 50

クエリの最適化については、以下をご覧ください。

  1. ORDER BY句は、時間がかかる主な理由です。
  2. 列にインデックスを追加しqtyます。
  3. また、使用しているストレージエンジンも、クエリのパフォーマンスの最適化に影響を与える可能性があります。MYISAMは最速のストレージエンジンです。
于 2012-06-02T09:02:59.140 に答える
0

の代替案を次に示しorder by rand()ます。これを一度試して、うまくいくかどうかを確認してください

select @lims := floor(1+rand()*(count(*) - 1)) from tbltemp;  

PREPARE mystatement FROM "SELECT * FROM tbltemp WHERE qty > 3 LIMIT ?, 50";

EXECUTE mystatement USING @lims;
于 2012-06-01T12:48:28.170 に答える
0

列に広告インデックスを作成する必要がありqtyます。
とにかくORDER By Rand()時間がかかる…

于 2012-06-01T09:59:11.977 に答える