sql查询速度慢,由于这个SQL没有命中索引,有两种解决方式:
1)改写sql,让查询命中索引
2)增加索引
3)1)或者2)方法之后,再加上一个缓存功能
而我一开始的解决方案就是,增加索引,在测试数据库上增加索引
ALTER TABLE 表名 ADD INDEX `idx_1`(`列名`) USING BTREE;
然后发现2w条数据,5分钟都没有执行完,还在保存中;相关的接口也调不通,请求超时
幸好还有 show processlist ,可以查看哪些线程正在执行,也可以查看锁表的线程。
结果,发现alter table * add key ****那个线程状态是Waiting for table metadata lock,后面有个这个表的所有操作都是这个状态,很明显是这条加索引的语句把表给锁了。
查看线程的id,然后kill id号把这个线程杀死。
果然,杀死了,这张表立马就可以用了。