heavenm 发表于 2019-11-8 18:54:30

sqlite数据库读写效率问题,终结!!各位别再踩坑了!

本帖最后由 heavenm 于 2019-11-10 13:12 编辑

原来需要40分钟的数据库分析,现在只需要90秒
研究了好几天。废寝忘食,终于OK了!


写效率:http://www.autoitx.com/thread-71679-1-1.html推荐方法,效率提升50倍以上:
安全有保障的加速写入方法,缺点就是需要在语句块前后加上_SQLite_Exec ( $__hdb,'BEGIN;' )
INSERT INTO "test"("%s") VALUES ("%s")
_SQLite_Exec ( $__hdb,'COMMIT;' )

读效率建索引,效率同样提升几十倍!
CREATE INDEX "索引名称" ON "表名称" ("字段" ASC,"字段" ASC);



内存的方法还是放弃了,读取到内存字典估计可以,历遍去读取,我冷静思考了一下。。。。。我发现2个3W的库,运行一次,等于要查询9亿次!难怪,我说怎么内存比读数据库还慢!用1000条数据去测试感觉不出来,用几万条测试就能感觉到了


heavenm 发表于 2019-11-9 00:54:56

循环查询1000条60秒

找到个办法,1000条11秒
6倍速度
SELECT*FROM t1 WHERE a='a'
UNION ALL
SELECT*FROM t2 WHERE a='a'
UNION ALL
SELECT*FROM t3 WHERE a='a';

heavenm 发表于 2019-11-9 01:14:37

CREATE INDEX "索引名称"
ON "表名称" (
"字段" ASC,
"字段" ASC
)
1000条2秒
字段索引

heavenm 发表于 2019-11-9 01:19:10

:face (29):现在能接受了
3W数据,60秒完成,之前要40分钟,天哪!重获新生!终于不用煎熬的等待了!

heavenm 发表于 2019-11-10 12:56:43

当数据过大,用内存的方法也失效,可能是因为我把数据库读取到数组中,每次查询都是历遍!
最终的解决办法是读数据库,建索引

CREATE INDEX "索引名称" ON "表名称" ("字段" ASC,"字段" ASC);

afan 发表于 2019-11-10 13:31:05

下次带上可测试实例吧,这样孤零零的折腾挺令人心酸的

heavenm 发表于 2019-11-10 14:25:39

afan 发表于 2019-11-10 13:31
下次带上可测试实例吧,这样孤零零的折腾挺令人心酸的

:face (36):
数据库有几百M,不过终于终结了!现在舒服了!每次等程序分析完都好心累!

afan 发表于 2019-11-10 15:32:50

本帖最后由 afan 于 2019-11-10 15:37 编辑

个人认为,如果不是与他人共享的数据库,根本没必要使用这些标准的数据库。读取写入都有转换的过程,浪费效率,也缺乏应用的灵活性。

guoguo188 发表于 2019-11-13 18:03:06

索引是爽,用 like 的 % 40万数据要十几秒,一个全文索引不到1秒{:1_240:}

heavenm 发表于 2019-11-13 18:22:54

guoguo188 发表于 2019-11-13 18:03
索引是爽,用 like 的 % 40万数据要十几秒,一个全文索引不到1秒

有更让人开心的方法?快说说咋弄个啊!

guoguo188 发表于 2019-11-13 18:45:48

heavenm 发表于 2019-11-13 18:22
有更让人开心的方法?快说说咋弄个啊!

很简单的,索引有多种,其中一种是‘全文索引’,功能说白了和搜索引擎一样,比 like +% 搜索快,三言两语说不清,你搜索一下就了解了。
页: [1]
查看完整版本: sqlite数据库读写效率问题,终结!!各位别再踩坑了!