索引优化

现有一sql

select
        id,
        apiSettleAmount,
        tmpAmount,
        taskNumber,
        amazonOrderId,
        planName,
        round(amount,2) as amount,
        singleCost,
        settleStatus,
        shopUser,
        round(amount+commission,2) as settleAmount,
        createTime,
        settleTime,
        tax,
        commission,
        planedAmount,
        userAccount,
        asin,
        productId
        from
        ( select
        sas.id as id,
        sas.api_settle_amount as apiSettleAmount,
        sas.tmp_planed_amount as tmpAmount,
        sas.task_number as taskNumber,
        sas.amazon_order_id as amazonOrderId,
        sas.plan_name as planName,
        sas.amount*7.5 as amount,
        sas.single_cost as singleCost,
        sas.settle_status as settleStatus,
        sas.shop_user as shopUser,
        sas.settle_amount as settleAmount,
        sas.create_time as createTime,
        sas.settle_time as settleTime,
        sas.tax as tax,
        sas.commission as commission,
        sas.planed_amount as planedAmount,
        su.phonenumber as userAccount,
        sp.asin as asin,
        tk.product_id as productId
        from online_client.shop_api_settle sas
        left join online_client.shop_user su on sas.shop_user = su.user_id
        left join online_client.shop_plan sp on sas.plan_name = sp.plan_name
        left join online_client.task_order tk ON sas.task_number = tk.task_number
         WHERE NOT ((tk.del_flag = 1 AND sas.settle_status = 0) or sas.settle_status = 2) 
        GROUP BY tk.task_number) as b

优化步骤
1.explan sql 查看sql的运行计划
先针对全表扫描的大数据,连接条件较少的表进行优化 ,如先优化 sp
在这里插入图片描述

2.查看 shop_plan 用到的字段 plan_name是否加索引,如果未加,权衡之后考虑是否加上
(考虑因素:该字段在项目 中用到的次数,该字段所在表的数据量,其他因素)
加的索引方法:如果该字段多次以是否存在用到,使用HASH,如果多次取值,使用BTREE,emmm这个应该知道

3.加了索引,sql还是没有走索引的话,考虑两个表的字段的字符集是否一致

4.如果还是走全表索引的话,可以无脑加上 where id >1 (有点无耻)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值