Performance 即使使用索引,sqlite查询速度也非常慢
我有一个非常简单的数据库,只有一个表:Performance 即使使用索引,sqlite查询速度也非常慢,performance,sqlite,Performance,Sqlite,我有一个非常简单的数据库,只有一个表: CREATE TABLE records ( id INTEGER PRIMARY KEY AUTOINCREMENT, symbol VARCHAR(20) NOT NULL, time_ts INTEGER NOT NULL, open_ts INTEGER NOT NULL, close_ts INTEGER NOT NULL, open_price REAL NOT NULL,
CREATE TABLE records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
symbol VARCHAR(20) NOT NULL,
time_ts INTEGER NOT NULL,
open_ts INTEGER NOT NULL,
close_ts INTEGER NOT NULL,
open_price REAL NOT NULL,
high_price REAL NOT NULL,
low_price REAL NOT NULL,
close_price REAL NOT NULL,
trades_count INTEGER NOT NULL,
volume_amount REAL NOT NULL,
quote_asset_volume REAL NOT NULL,
taker_buy_base_asset_volume REAL NOT NULL,
taker_buy_quote_asset_volume REAL NOT NULL)
和一个索引:
CREATE INDEX symbol_index ON records (symbol)
数据库的大小为12.63GB
我正在运行此查询:
SELECT
symbol,
MAX(close_ts) max_close_ts,
MIN(close_ts) min_close_ts
FROM records
GROUP BY symbol
执行它大约需要一分钟
如您所见,索引是在symbol
列上创建的。。然而,即使这样,查询速度也非常慢
即使是这样的查询:
select count(id) from records;
执行大约需要77秒。表中的总行数为115\u 944\u 904
我预计未来这一记录将增加两倍。我能做些什么来加快查询的速度吗?即使主键和符号列上有索引,我的性能也相当差
我是否达到了任何类型的限制?您可以创建覆盖索引以避免访问表:
CREATE INDEX symbol_index ON records (symbol,close_ts)
SELECT
symbol,
MAX(close_ts) max_close_ts,
MIN(close_ts) min_close_ts
FROM records
GROUP BY symbol;
如果您使用“解释查询计划”并查看扫描统计信息,它还将显示您创建的索引何时使用该索引。此外,还应创建覆盖索引“”,以获得更好的性能
例如:
解释查询计划
从记录中选择计数(id) 正如Lukasz Szozda所说
CREATE INDEX symbol_index ON records (symbol,close_ts)
应该使查询更快,因为每个组上有两条聚合语句
这样,DMB将跳过符号列中每个不同条目的所有中间行
您将利用的优势与符号成正比:您拥有的符号列条目越少,查询的速度就越快为了将来参考,sqlite3命令行shell有一个功能,可以建议为给定查询添加索引:在添加索引后在表上运行也是一个好主意,在关闭数据库之前,如果需要,可以重新生成统计信息代码>比显式列出列快。现在,使用组执行相同查询需要约11秒。有没有办法增加一个简单的查询
select count(id)from records代码>性能?我发现很难相信记录的计数会这么慢。。