记一次查询索引的联合索引的添加

如何添加联合索引呢。还是值得深思的 一个问题。

如下的select 操作语句 select cusromer_id,title,content from product_comment where audit_status = 1 and product_id = 199726 

在未添加索引时 使用explain语句执行 时possible_key为null key列也为null 意味着没有任何可以使用的索引,和实际也没有使用任何索引。

那么现在考虑如何添加一个联合索引呢。

因为我们必须要查询的是审核通过的所以 audit_status = 1 是必须的所以 必须是联合索引。

那么问题来了,既然是联合索引 那么哪一列放在前面呢。

分别执行以下的语句
select count(distinct audit_status)/count(*)  as audit_rate,count(distinct product_id)/count(*) as product_rate from product_commnet

查询出来的结果 哪个大则意味着区分度比较高。在进行普通索引  btree 查找时更加的高效。同时这一列 也应该放在前面


添加完索引那么是否可以再进行优化呢。对于这样的sql语句来说,事实上我们都清除 当product_id 越大那么带来的问题就是 越往后翻页则效率会越差
通过子查询 可以解决这个问题,使得每次的io开销处于同一个值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值