一、MySQL数据库的联合索引
1、采用50个并发、持续压测300秒、在Linux服务器输入jmeter -n -t test.jmx
2、数据库中创建了联合索引:name、age、class这3个字段都用的同一个索引my_index并且是unique类型的
3、按理来说都是unique类型的性能应该是最好的、在接口请求里面http://ip:8080/user/search?age=18&class=1 去请求接口
4、在Linux服务器端通过dstat -tcmnd --disk-util命令去监控应用服务器发现CPU还是消耗的比较多、数据库服务器里面CPU的idle已经为0%、没有空闲的CPU了
5、然后tps又恢复到300多了、说明还是存在慢SQL的问题
6、继续进行排查发现一个问题、联合索引属于左前缀使用的原则、就是数据库设置联合索引的时候是按照的name、age、class字段是设置的、这样会导致如果用selec * from student where name=xxx and age
和select * from student where name=xxx and class=xx 这样查询的是没有问题的、因为name在最前面是可以作用到unique的
7、但是如果是select * from student where age=18 and class=1里面是没有包含name字段的、并且如果有name字段但是也不是在最左侧查询出来unique索引也是作用不到的、对SQL进行explain发现还是用的扫描类型为全表扫描
所以才导致慢SQL性能大打折扣
8、这种情况的话可以把数据库中的索引顺序改为name、age、class、然后搜索的时候采用最左前缀原则、瞬间tps就提升了60倍能达到18000多tps了
二、MySQL数据库的连接数
1、
标签:sir,多测师,name,age,数据库,索引,MySQL,杭州,class From: https://www.cnblogs.com/xiaoshubass/p/16754614.html