mysql优化问题
问题描述:
explain SELECT m.*,u.username nickname,u.vip,u.appid FROM wwj_mingxi m left join wwj_user u on u.id=m.uid WHERE u.appid = 0 ORDER BY id desc LIMIT 0,20
索引也建了,但是查询还是要4s.还有方法优化吗
第 1 个答案:
using temporary,using filesort ---表示用了临时表和文件排序,当然会慢了。
为什么会产生临时表和文件排序? 我猜是因为 你用m作为主表,又用了u.id作为排序,解决方法是:
- 如果你用u.id来排序,那最好用u来作主表去join m表
- 如果不能改用u作主表,那可以试试将主表改为子查询,将排序放到子查询中
第 2 个答案:
left join换成join
appid加个索引
第 3 个答案:
从你的explain中能看出。一共检索 91585 行。4秒肯定索引建立不正确。 起到作用的索引 u.appid,m.user_id_ix。你应该 u.id ,m.uid 建立相应的索引或外键。
第 4 个答案:
出现了using temporary,这里mysql需要创建一个临时表来存储结果,这通常发生在对不同的列集进行order by。
第 5 个答案:
你那是明细表和用户表join吧。
- where条件里有u.appid=0,那说明肯定是可以用right join代替你的left join,right join会更快一些;
- u.id,m.uid,u.appid要是都有索引就更快了,你最后的order by id其实就是order by u.id吧,order by 的字段最好也是要索引的。
在使用nuxt的过程中,引入一个第三方插件‘alert’挂载到vue.use(Alert)。当前运行npm run dev 后报出Unexpected token import。初步怀疑是nuxt将这个a ...