看看别人后端API接口性能优化的11个方法

AI觉醒者
• 阅读 767

前言

接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。
该问题说简单也简单,说复杂也复杂。
有时候,只需加个索引就能解决问题。
有时候,需要做代码重构。
有时候,需要增加缓存。
有时候,需要引入一些中间件,比如mq。
有时候,需要需要分库分表。
有时候,需要拆分服务。
等等。。。
导致接口性能问题的原因千奇百怪,不同的项目不同的接口,原因可能也不一样。
本文我总结了一些行之有效的,优化接口性能的办法,给有需要的朋友一个参考。

1.索引

接口性能优化大家第一个想到的可能是:优化索引
没错,优化索引的成本是最小的。
你通过查看线上日志或者监控报告,查到某个接口用到的某条sql语句耗时比较长。
这时你可能会有下面这些疑问:

  • 该sql语句加索引了没?
  • 加的索引生效了没?
  • mysql选错索引了没?

1.1 没加索引

ql语句中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;

实例

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }

注: String args[] 与 String[] args 都可以执行,但推荐使用 String[] args,这样可以避免歧义和误读。\
运行以上实例,输出结果如下:

$ javac HelloWorld.java
$ java HelloWorld
Hello World
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
tomcat调试servlet
有时候web程序会引用到workspace下面的其它工程,在tomcat调试的时候,经常会出现找不到所引用的jar的问题。 而抛出的异常也很诡异,有时候会是:<strongclassNotFound</strong,或者<strongNoClassDefineFound</strong, 有时候甚至会是<bXXXcan'tbe
Magician-Containers 1.0.0 发布,Magician 家族又添一位新成员
最近在使用Magician开发项目的过程中,发现了一些问题,有时候想对某些方法做监听,或者想启动一个定时任务做轮询,会比较麻烦一点,因为Magician暂时没有对应的解决方案,但是我又不想在现有的Magician里添加功能,因为这样会让项目变得越来越大,最后逐渐变成一个大胖子,失去灵活性,开发者在使用的时候,不管需不需要的功能都会被一股脑的
Wesley13 Wesley13
3年前
Java中通过jsch来连接远程服务器执行linux命令
有时候你可能需要通过代码来控制执行linux命令实现某些功能。针对这类问题可以使用JSCH来实现,具体代码如下:publicclassCogradientImgFileManager{privatestaticfinalLoggerlogLoggerFactory.getLogger(Co
Stella981 Stella981
3年前
Play 2.0 用户指南 - 调用WebServices -- 针对Scala开发者
   PlayWSAPI   有时候我们需要在Play应用中调用外部HTTP服务。Play通过play.api.libs.ws.WS库提供支持,它提供了一种异步HTTP调用的方法。   任何play.api.libs.ws.WS的调用將返回Promise\play.api.libs.ws.Response
Stella981 Stella981
3年前
HIVE之UDF函数开发
1为什么要写UDF函数    有时候hive自带的函数不能满足当前需要,需要自定义函数来解决问题2UDF,UDAF,UDTF的比较UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
Stella981 Stella981
3年前
PHP发起POST请求(支持模拟表单和json传值)
HTTP请求是开发的过程中经常会遇到的任务,GET请求比较简单,但是POST请求却会遇到一些问题。有时候对方需要你模拟表单请求,有时候又希望你传递一个json。我们可以封装一个通用的方法来完成。functionpost($url,$data,$isJsontrue,$headers,$timeout10
Wesley13 Wesley13
3年前
Java日期时间API系列23
  有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59。下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第一天开始时间,当前月最后一天结束时间,上个月第一天开始时间,上个月最后一天结束时间,某个指定月的起始结束时间等等。其中月份最后一天往往因为月份不同和
Stella981 Stella981
3年前
RabbitMQ实现即时通讯居然如此简单!连后端代码都省得写了?
摘要有时候我们的项目中会用到即时通讯功能,比如电商系统中的客服聊天功能,还有在支付过程中,当用户支付成功后,第三方支付服务会回调我们的回调接口,此时我们需要通知前端支付成功。最近发现RabbitMQ可以很方便的实现即时通讯功能,如果你没有特殊的业务需求,甚至可以不写后端代码,今天给大家讲讲如何使用RabbitMQ来实现即时通讯!MQ
javalover123 javalover123
2年前
HTTP接口性能压力测试
开发接口以后,对性能有要求的接口,需要做性能压力测试。常见免费的如:经典的ab,性能不太好的jmeter、siege(有时候都怀疑程序性能不行了),另介绍hey、k6、vegeta、wrk
Python进阶者 Python进阶者
11个月前
python打包的exe文件为什么有时候运行很慢有时候很快?
大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【哎呦喂是豆子~】问了一个Python打包处理的问题。问题如下:大佬们请问下你们有没有遇到这种情况python打包的exe文件为什么有时候运行很慢有时候很快?同一个exe文件有时候等
布局王 布局王
2个月前
在鸿蒙开发中实现自定义进度条
前些天发现一个问题,鸿蒙官方的进度条组件Progress虽然提供了比较丰富的功能,但是有时候还是不能满足开发的需要。比如有时候我需要在进度条上有个圆点来控制进度,Progress就没有提供这种样式,所以今天就跟大家分享一下自定义进度条的实现过程。这里我使用