検索

ホームページ  >  に質問  >  本文

mysql - 这条sql可以怎么优化,求帮助

select count(*) from trade where shippingtype <> "free" and status in ("TRADE_FINISHED","WAIT_SELLER_SEND_GOODS") and tosellerreachgoods = 0 and consigntime <1470110400000 and ( endtime >=1469980800000 or endtime is null ) and created >=1469980800000 and created <=1470067200000 and user = "xxxxxxxxxxxxxxxx" ;

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE trade range trade__user,trade_user_created,trade_user_buyernick,trade__status_created,trade_user_status trade_user_created 108 NULL 588 Using index condition; Using where
阿神阿神2837日前740

全員に返信(4)返信します

  • 阿神

    阿神2017-04-17 15:21:32

    Explain 結果からはこのクエリに特別なことはありませんが、次の点が考えられます。
    1、shippingtype、および status は列挙値であるように見え、tinyint に置き換えることができます (数値クエリは文字列クエリよりも高速です)。
    2、endtime は <🎜 に設定されます。 > 、元の null 値を特殊な値 (-1 または 0) に置き換えます。NOT NULL 値はインデックスの効率に影響します。NULL 3. 可能であれば、
    の代わりに user_id を使用します。 🎜> user個人 YY の最適化:

    リーリー

    最初の 4 つの条件については特に言うことはありません。主なものは、

    consigntime のフィルタリング範囲に従って配置されています。 (具体的には、テーブルの 3 つの条件、フィールドの範囲によって異なります)。 created endtimeいくつかの提案は、テーブル構造を変更できるという事実に基づいています。権限がない場合は無視してください。

    参考: http://tech.meituan.com/mysql...

    返事
    0
  • 阿神

    阿神2017-04-17 15:21:32

    強い

    返事
    0
  • 黄舟

    黄舟2017-04-17 15:21:32

    パフォーマンスに影響を与えるという意味ではありません

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:21:32

    説明から見て問題ありません

    返事
    0
  • キャンセル返事