测试用例-查询效率
一. 前提
表
id: 主键
name: 唯一,不为null
sex: 两种值,不唯一,不为null
title: 不唯一,可为null
code: 唯一,可为null
createTime: 不唯一,不为null
数据
- 随机生成10w条数据
- id主键自动递增
- name长度为5-10,允许的字符为
abcdefghijklmnopqrstuvwxyz
- sex列true/false几率各占50%
- title长度为10-30,允许的字符为
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
- code列有50%几率为null,50%几率为长度8的字符串,允许字符为
abcdefghijklmnopqrstuvwxyz
- createTime为任意Long值(可为负)
数据量
10w条数据
二. 查询
1. =查询
语句:
- 如select * from info where id=5000或name=’xxx’
- 如select * from info where title=’‘或sex=0
类型
有索引时const,无索引时all
速度
有索引时非常快(1ms),无索引时较慢(100ms)
结论
- 有索引时数据量增大不影响查询速度
- 无索引时数据量越大速度越慢
2. like&instr查询
语句
-
like: 如select * from info where title like ‘%xxx%’或like ‘%xxx’或like ‘xxx%’
-
instr: 如select * from info where instr(title, ‘xxx’)
类型
一般是all(特殊如有索引且like ‘xxx%’时为range)
速度
- 较慢
- like ‘%xxx%’时275ms,like ‘%xxx’与like ‘xxx%’时125ms
- instr(title, ‘xxx’)时为300ms
结论
- 无论是like还是instr,查询的
关键字越长耗时越小
- like时’%xxx%’最慢(常用),’%xxx’与’xxx%’时稍快(用得不多)
- 数据量大时instr快(未测出,网上资料),数据量小时like快,但实际使用
instr
即可