用了几年的mysql,对其性能了解部分,如加索引不加索引查询、全置匹配与前置后置匹配区别,但都没有自己去测试过,今天有时间就满足一下自己的好奇心!!!
首先附上本人电脑的一些配置,硬件也是影响性能的一部分
电脑配置:
首先我准备了1000000条数据(批量插入大概花了7分钟,有空研究一下如何提升批量操作效率),两百万会报JVM内存溢出(全表查询集合报Cause: java.lang.OutOfMemoryError: GC overhead limit exceeded,有空可以去把JVM内存设大点)
代码段
long currTime = System.currentTimeMillis();
Flow flow = new Flow();
flow.setUserName("998000姓名");
// flow.setId(999018);
List<Flow> list = flowService.list(null);
System.out.println("list结果集:----》" + list.size());
System.out.println("执行时间:----》" + (System.currentTimeMillis() - currTime));
- 全表无索引无条件查,执行时间为:23932毫秒
- 全表有索引无条件查询(代码同上),执行时间为:23046毫秒
- 根据主键ID查询,执行时间为:1140毫秒
- 无索引字符串使用 like 前后置匹配,执行时间为:3229毫秒
- 有索引字符串使用 like 前后置匹配,执行时间为:3066毫秒(索引没生效)
- 无索引字符串使用 like 前置匹配,执行时间为:2624毫秒
- 有索引字符串使用 like 前置匹配,执行时间为:2564毫秒(索引没生效)
- 无索引字符串使用 like 后置匹配,执行时间为:2687毫秒
- 有索引字符串使用 like 后置匹配,执行时间为:1598毫秒
- 无索引字符串使用 等于匹配,执行时间为:2285毫秒
- 有索引字符串使用 等于匹配,执行时间为:768毫秒
得出结论(这里建立的是普通索引)
使用like,索引前置匹配失效,后置匹配生效。
有索引的情况下使用等于比like执行效率要高