请教firedac访问SQLITE基础问题

k39k39 2016-12-12 10:28:37
用firedac读取SQLITE,
SQL语句为“select * from data where flag1=true and flag2=4 order by id desc limit 100”
请教当数据量较大,百万条以上时。
1、最合理的索引应该怎么建。
2、需要哪些设置才能达到最快读取速度。
...全文
515 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
santiaodahan 2016-12-14
  • 打赏
  • 举报
回复
ADO也可以用SQLite,需要装ODBC,比如SqliteOdbc,也有相关控件,如ZeosLIB。你用SQLite这种小型数据库操作百万行数据速度不会很快的,可以考虑换数据库。
k39k39 2016-12-14
  • 打赏
  • 举报
回复
原来用ADO读取ACCESS,现在改用FIREDAC读取SQLITE后,数据一多就慢,比ADO+ACCESS还慢,DEMO例子无助于效率提高,所以寻求优化方法。
santiaodahan 2016-12-14
  • 打赏
  • 举报
回复
组件用法可以查帮助,在属性或方法上按F1。IDE本身也带不少例子。比如C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Database\FireDAC\Samples\Getting Started\SQLite这个目录下就有FireDAC操作SQLite的例子,其他目录下还有SQLite移动开发的例子。
k39k39 2016-12-13
  • 打赏
  • 举报
回复
谢谢santiaodahan 阐述了索引方面的问题,我还想知道firedac控件有没有涉及的设置。
santiaodahan 2016-12-13
  • 打赏
  • 举报
回复
1.如果id是integer类型的话,设置为主键,并且降序排序。主键列自动成为一个唯一性索引列。如果flag1仅有真假两个值,建索引效果有限,可以不建。flag2如数据唯一性比较强的话,此列上可建索引。(也可以测试一下复合索引效果如何) CREATE TABLE data(id INTEGER, flag1 type,flag2 type,PRIMARY KEY(id DESC)); CREATE INDEX flag2_idx On data(flag2); 另外,创建表时使用WITHOUT ROWID关键字可以实现聚集索引作为主键的表。大致相当于在物理上已经排序好的表,某些情况有性能优势。它适合非整数或复合(多列)主键的表,并且不存储大字符串或BLOB的情况。 2.对查询性能影响比较大因素包括:数据库类型的选择,硬件性能,结果集的大小,索引和排序等。查询性能有时候取决于数据本身的特点,并且索引会影响插入、修改的性能,所以可以组合以上因素,具体测试哪个方案更优。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧