怎么在网站上添加广告代码,深圳做关键词优化平台,网站建设定价,网络营销企业网站设计今天遇到个奇葩的问题#xff0c; sql 数据量很大 有where 和order by#xff0c;不加order by 速度很快#xff0c;加了就很慢 一、首先我们对这条sql执行查询计划#xff1a; explain select t.order_id from book_order t ORDER BY t.order_id desc explain select t.… 今天遇到个奇葩的问题 sql 数据量很大 有where 和order by不加order by 速度很快加了就很慢 一、首先我们对这条sql执行查询计划 explain select t.order_id from book_order t ORDER BY t.order_id desc explain select t.order_id from book_order t 这条语句应用的索引是idx_bo_order_book_local 进一步确定再对使用where条件后索引变成了主键。 explain select t.order_id from book_order t where t.order_id 1593539 通过以上的情况可以看出 MySQL默认的查询没有where条件不一定使用主键由于MySQL的每一条简单查询只应用一个索引所以这个时候使用order by 主键主键的索引功能失效。 二解决办法 1、order by 索引where条件中引用的索引。 2、强制使用主键FORCE INDEX(PRI)如果想强制使用索引则用FORCE INDEX(索引名)。 explain select t.order_id from book_order t FORCE INDEX(idx_bo_order_book_local) ORDER BY t.order_id desc; 三、其他order by 索引失效的原因分析 1、MySQL每天一条简单语句只应用一个索引所以order by的字段要在索引之中并且和where条件可以合并成组合索引。 2、select的字段必须是索引字段。主键查询除外 3、如果sql语句为复合语句包含子查询等可以把语句分解成简单查询来分析。 转载于:https://www.cnblogs.com/yizhiamumu/p/9004550.html