求sqlite数据库索引创建语句或性能优化方案

表内容:
create table if not exists sms_tb(name text unique,passwd text,expire_time bigint,create_time bigint,mac text);
create table if not exists qrcode_tb(mac text unique,name text,expire_time bigint,create_time bigint,note text);
create table if not exists temporary_tb(name text unique,passwd text,expire_time bigint,create_time bigint,note text);
每个表100W条数据,现在有几个需求:
1、update sms_tb set passwd=****** where name='123456789';
根据name查找到相应数据执行update,delete操作;
2、SELECT * FROM sms_tb ORDER BY create_time DESC LIMIT 25 OFFSET 0;
根据create_time找出创建时间最大的25个数据;
3、select count(*) from sms_tb where create_time>=0 and create_time<=1383525367;
查找创建时间满足区间要求的数据数量;

我现在创建的索引是以create_time创建的。现在增删改的速度是0.1秒左右,查找时与未添加索引时优化的效果也不明显
大神们有没有好的解决方案。
1、对text字段建索引没有明显升速度
2、create_time 可以大幅增加order by的速度
3、由于索引的使用限制,索引只对第一个不等好有效,效果也不明显。
这是我经过测试得出的结论,大神们有没有好的提升效率的方案,如有帮助另送100分

第1条语句,跟create_time索引没关系
第2条语句,应该不会使用create_time索引,因为即便用了索引最后还是要读表数据,还不如直接全表读数据然后在内存中排序快
第3条语句,不知道0到1383525367的create_time选出的记录数相对于全表记录数的比率有多大,太多了应该也不会使用索引,因为最后还是要读一遍表数据,如果比率比较小应该会用上索引追问

你好,谢谢你的回答,不过,创建单个的create_time索引确实可以提升速度,但不是很明显,我想知道如何建索引或者如何写sql语句可以使他的速度提升。

追答

在text上建立索引,效率没明显提高,这是跟数据相关的。1是看选择率,就是选出的记录总数占所有记录总数的比例,太高了索引无效,因为数据库都是按块存储的,每次读至少一块,最后的结果可能是索引读一遍,但数据所有的块还是全读了一遍;2是看数据分布,譬如每块能存100条记录,name='123456789'的记录总数虽然只总记录数的1%,但正好每块都有一条,这样依然会把所有数据块都要读一遍,此时先读索引也提高不了效率,象oracle之类的大型数据库就会选择全表扫描。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答