@wxf
2018-04-09T13:22:57.000000Z
字数 3182
阅读 1188
面试系列
原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。
参考:
HikariCP连接池监控指标实战
MySQL 的索引是什么?怎么优化?
使用EXPLAIN查看SQL执行计划,重要关注点包括:type(连接类型)、possible_keys(建议使用的索引)、key(使用的索引)。
连接类型的理想状态包括:system、const、eq_ref、ref、ref_or_null。
索引可以提供查询的速度,但并不是使用了带有索引的字段查询都会生效,有些情况下是不生效的,需要注意!
mysql索引总结----mysql 索引类型以及创建
MySQL的btree索引和hash索引的区别
在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不起作用。只有“%”不在第一个位置,索引才会生效。
MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。因为执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响。
优化:
可以使用连接查询(JOIN)代替子查询,连接查询时不需要建立临时表,其速度比子查询快。
扩展-连接查询:
1. 内连接(inner join 或 join),它是等值连接,它使用“=、>、<、<>”等运算符根据每个表共有的列的值匹配两个表中的行。
2. 左连接(left join 或 left outer join), 左连接又称左向外连接,查询的结果集包括SQL语句中左表的所有行,右表中匹配的行。如果左表的某行在右表中没有匹配行,则用空值表示。
3. 右连接(right join 或 right outer join),右连接也成右向外连接,查询的结果集包括SQL语句中右表的所有行,左表中匹配的行。如果右表的某行在左表中没有匹配的行,则用空值表示。
4. 完全外连接(full join 或 full outer join),完全外连接,查询的结果集包括SQL语句中左表和右表的所有行。如果某行在另一个表中没有匹配行时,则用空值表示。
总结:SQL中连接查询分内、外连接,外连接分左连接、右连接和完全外连接,它们的功能与视图差不多。其中左右连接查询是相对应的,即把连接类型和左表、右表互换位置就可得到相同的结果集。
MyISAM:非事物安全型;表级锁;支持全文索引等。
应用场景:管理非事物表,它提供高速存储和检索,以及全文搜索能力。如果应用中需要大量的SELECT查询,适合使用该引擎。
InnoDB:事物安全型;行级索;不支持全文索引等。
应用场景:用于事物处理应用程序,如果应用中需要执行大量的INSERT或UPDATE操作,适合使用该引擎。
唯一性校验会降低插入记录的速度,可以在插入记录之前禁用唯一性检查,插入数据完成后再开启。
禁用:SET UNIQUE_CHECKS = 0;
开启:SET UNIQUE_CHECKS = 1;
通过优化Tomcat提高网站的并发能力
配置Tomcat管理员账户
在conf/tomcat-users.xml下添加如下信息:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
添加用户后可以通过页面查看Tomcat配置优化信息。
优化设置
org.apache.coyote.http11.Http11NioProtocol
优化HTTP连接器
连接器(Connector)是Tomcat接收请求的入口,每个连接器都有自己专属的监听端口。连接器存在两种类型:HTTP Connector和AJP Connector
禁用AJP连接器
AJP是Apache + Tomcat架构中用到的一种通信方式,而我们一般使用Nginx + Tomcat架构,所以不需要AJP协议。
# 在conf/server.xml配置文件中将AJP连接器注释掉
<!-- 禁用AJP连接器
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
-->
适当调整Tomcat运行的JVM参数可以提升整体性能
Java内存模型分为年轻代(Young)、终生代(Tenured)、永久带(Perm)。其中