接口性能优化的11个小技巧

1.索引
 
接口性能优化大家第一个想到的可能是:优化索引。
 
没错,优化索引的成本是最小的。
 
你通过查看线上日志或者监控报告,查到某个接口用到的某条sql语句耗时比较长。
 
这时你可能会有下面这些疑问:
 
该sql语句加索引了没?
 
加的索引生效了没?
 
mysql选错索引了没?
 
1.1 没加索引
 
sql语句中where条件的关键字段,或者order by后面的排序字段,忘了加索引,这个问题在项目中很常见。
 
项目刚开始的时候,由于表中的数据量小,加不加索引sql查询性能差别不大。
 
后来,随着业务的发展,表中数据量越来越多,就不得不加索引了。
 
可以通过命令:
 
show index from ——order——;
 
能单独查看某张表的索引情况。
 
也可以通过命令:
 
show create table ——order——;
 
查看整张表的建表语句,里面同样会显示索引情况。
 
通过ALTER TABLE命令可以添加索引:
 
ALTER TABLE ——order—— ADD INDEX idx_name (name);
 
也可以通过CREATE INDEX命令添加索引:
 
CREATE INDEX idx_name ON ——order—— (name);
 
不过这里有一个需要注意的地方是:想通过命令修改索引,是不行的。
 
目前在mysql中如果想要修改索引,只能先删除索引,再重新添加新的。
 
删除索引可以用DROP INDEX命令:
 
ALTER TABLE ——order—— DROP INDEX idx_name;
 
用DROP INDEX命令也行:
 
DROP INDEX idx_name ON ——order——;
 
1.2 索引没生效
 
通过上面的命令我们已经能够确认索引是有的,但它生效了没?此时你内心或许会冒出这样一个疑问。
 
那么,如何查看索引有没有生效呢?
 
答:可以使用explain命令,查看mysql的执行计划,它会显示索引的使用情况。
 
例如:
 
explain select * from ——order—— where code=’002′;
 
结果:
 
通过这几列可以判断索引使用情况,执行计划包含列的含义如下图所示:
 
说实话,sql语句没有走索引,排除没有建索引之外,最大的可能性是索引失效了。
 
下面说说索引失效的常见原因:
 
如果不是上面的这些原因,则需要再进一步排查一下其他原因。
 
1.3 选错索引
 
此外,你有没有遇到过这样一种情况:明明是同一条sql,只有入参不同而已。有的时候走的索引a,有的时候却走的索引b?
 
没错,有时候mysql会选错索引。
 
必要时可以使用force index来强制查询sql走某个索引。
 
至于为什么mysql会选错索引,后面有专门的文章介绍的,这里先留点悬念。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64910.shtml

张贴在3