sqlite不相邻的字段建立联合索引,where子句依据该联合索引查询时,联合索引会生效吗?

embedded_liwj 大连网月科技开发有限公司成都分公司研发部 开发组长/高级工程师/技术专家  2013-07-20 02:20:04
我最近的一个项目用到了sqlite数据库,平台是mips+linux,现在在进行数据库的查询优化,在网上看了些资料,总是感觉不明朗,现在在这里将我的问题和疑问总结一下,请各位大侠指点迷津啊,小弟在此先谢了!

1、sqlite数据库存储的字段内容大小对查询效率有没有影响?还是说要看情况而定(比如说是否担当查询条件)?

2、sqlite数据库中对不连续的字段建立联合索引,该联合索引在where子句中作为查询条件时是否完全生效?
(注:我没有使用or、between、like,只有 = 、>= 和<=)。例如:creat if not exists index_1 on table_1(username,time),其中username(类型varchar),time(integer)两个字段互不相邻,此时,select * from table_1 where username='Tom' and time>='a' and time<='b',此时username和time的联合索引是否完全生效?

3、在2的基础上,如果只以联合索引中的username为条件查询,例如select * from table_1 where username='Tom' ,此时,联合索引中的username索引是否生效?

4、在2的基础上,如果只以联合索引中的time为条件查询,例如select * from table_1 where time>='a' and time<='b',此时,联合索引中的time索引是否生效?
注:在网上查资料,有人说在3中,username索引可以生效,但4中的time不会生效,这是有关前导列的问题,求证!

5、在2的基础上,我又单独对time字段建立了独立索引,creat if not exists index_2 on table_1(time),这样有没有什么问题?如果没有问题,那么请问一下,在username和time作为条件联合查询时,索引是怎么走的呢?并且和分别对username和time建立独立索引相比,效率如何?

6、关于数据库的分页查询:假如有一张表有100000条记录,select * from table limit 前10条和后10条效率相差甚远,求解释和解决方法,并且请问一下,此时是不是不可避免的全表查询,没有索引可走?有没有办法优化?

7、最后,我的项目平台是mips+linux,mips的cpu是384M的,数据库存储在U盘(读写速度较慢)里,请问一下,数据库的一张表里面存储了100000条数据,在6的基础上查询后10条大概要花多长时间(经验值)?
...全文
187 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
embedded_liwj 2013-07-22
先谢谢版主了,问题确实比较多,因为我的思路现在比较混乱,还没有找到问题关键所在,只好一条条说了。 请问一下版主,where time>='a' and time<='b',联合索为什么没有生效呢?难道是第一个time加了大于号的原因吗?另外,如何改进呢?
回复
ACMAIN_CHM 2013-07-20
1、sqlite数据库存储的字段内容大小对查询效率有没有影响?还是说要看情况而定(比如说是否担当查询条件)? 微观的说,肯定有影响。 读取10个字节和读取1000个字肯定时间消耗不同。 creat if not exists index_1 on table_1(username,time) where username='Tom' and time>='a' and time<='b', 会使用索引 where username='Tom' ,联合索引生效 where time>='a' and time<='b',联合索引不生效 问题太多了,没有耐心继续看下去了。
回复
发动态
发帖子
其他数据库
创建于2007-09-28

2185

社区成员

其他数据库开发 其他数据库
申请成为版主
社区公告
暂无公告