@
la0wei #21
## 1. MySQL 提升巨大
回头看了看,突然发现,会不会是你的索引不是覆盖索引,所以取整行数据时(你 SELECT * 了),都要回表去取?
恐怖地说,你回表了 180W 次?*(当然,其中应该有很多都被 MySQL 缓存下来了,实际没有去硬盘读取)*
## 2. SQLite 用了内存数据库,还是很慢
> 用 sqlite 读数据库文件进内存查询,速度不够快,单条查询在 0.5S 的样子,是因为读取数据时没有读取索引吗
那估计就是索引不对了。没看到具体代码,只能这么猜。
> 早上测试多个查询,初始需要读取整个数据库,首次查询较慢,后面速度就快多了。不过速度似乎是没有 mysql 快的,索引的效果看来是很好的
不知道你的**等价**表结构、索引、查询语句,不好判断。
我印象中,本地非并发写场景,SQLite 一般可以比 MySQL 快几倍,甚至 10 倍都有。
*(我有个 [关于树形结构存储的帖子](
https://v2ex.com/t/889443#reply21) 有这两者的速度对比)*
## 3. sqlite 读入内存查询和常规的方法速度比较
我把 16 楼的代码改造了下,随机生成完 1 亿行数据后,保存到机械硬盘(文件大小 2.12 GB )。
然后关闭内存数据库,再重新打开机械硬盘上的数据库文件,查询 2000 行 9 个字段。结果用了 48 秒。( SQLite 内存缓存大小,是默认的 2 MB )
所以,真没必要用内存数据库。占内存大( 2.5 GB ),也没提速多少。
这也是一般情况下,对于你的需求,我目前能想出的办法,一分钟统计一亿行左右。