如何添加联合索引呢。还是值得深思的 一个问题。
如下的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开销处于同一个值。