做个实验,想了解SQLite3索引对整数排序的性能影响。
用这个测试表,考查绿色那列:
id | name | date |
自增型主键 |
字符串型,随机生成 |
整数型 随机生成,范围0到54354354 |
1 | bMzLiLzx2fBLUfBfFj29 | 43232244 |
2 | ofFzjPmQ5Pj82mHLm7yI | 18243324 |
3 | ... | ... |
分别测试以下两种情况:
- date列有索引
- date列无索引
各插入100万条随机数据,然后执行10次这条SQL查询语句:
1 SELECT * FROM test_tbl 2 WHERE date BETWEEN 20000000 AND 30000000 3 ORDER BY date DESC;
结果:
date有索引 | date无索引 | |
插入100万数据的时间 | 22.35秒 | 20.77秒 |
查询10次的时间 | 0.0001442秒 | 1.5538秒 |
去掉第3行SQL语句, 查询10次的时间 |
0.0001146秒 | 0.0001451秒 |
可见,索引对 ORDER BY date DESC 子句的性能有较大影响,如果没有这个子句则区别不大。
测试于SQLite 3.8.11,64位,Windows 10。