空空叶博客 学习与开发博客

测试用例-查询效率

2017-05-05
sql

测试用例-查询效率

一. 前提

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即可

上一篇 测试

下一篇 游戏笔记

目录