提高SQLite查询性能

时间:2014-12-19 03:35:49

标签: sqlite

我在SQLite和SQLServer中运行了以下查询。在SQLite上查询从未完成运行 - 我让它坐了几个小时仍然继续运行。在SQLServer上运行需要不到一分钟。该表有数十万条记录。有没有办法在SQLite中提高查询的性能?

update tmp_tbl
   set prior_symbol = (select o.symbol
                         from options o
                        where o.underlying_ticker = tmp_tbl.underlying_ticker
                          and o.option_type = tmp_tbl.option_type
                          and o.expiration = tmp_tbl.expiration
                          and o.strike = (select max(o2.strike)
                                            from options o2
                                           where o2.underlying_ticker = tmp_tbl.underlying_ticker
                                             and o2.option_type = tmp_tbl.option_type
                                             and o2.expiration = tmp_tbl.expiration
                                             and o2.strike < tmp_tbl.strike));

更新:我能够使用一些python代码并处理SQL之外的数据映射来完成我需要的工作。但是,我对SQLite和SQLServer之间的性能差异感到困惑 - 我期待SQLite更快。

当我最初运行上述查询时,两个表都没有除标准主键id之外的任何索引,这与数据无关。我创建了两个索引如下:

create index options_table_index on options(underlying_ticker, option_type, expiration, strike);

create index tmp_tbl_index on tmp_tbl(underlying_ticker, option_type, expiration, strike);

但这没有帮助。查询仍然继续没有任何输出时钟 - 我让它运行了将近40分钟。

tmp_tbl的表定义是:

create table tmp_tbl(id integer primary key,
                     symbol text,
                     underlying_ticker text,
                     option_type text,
                     strike real,
                     expiration text,
                     mid real,
                     prior_symbol real,
                     prior_premium real,
                     ratio real,
                     error_flag bit);

选项表的定义类似,但还有一些字段。

0 个答案:

没有答案