首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增强select sqlite查询的性能

增强select sqlite查询的性能
EN

Stack Overflow用户
提问于 2016-01-13 18:18:15
回答 1查看 41关注 0票数 1

在这个sqlite查询中,我有大约11k条记录的返回数据集。此查询中是否存在可帮助提高性能的更改范围。谢谢

代码语言:javascript
运行
复制
SELECT count(*) as count, easting,northing FROM tableName where site='K' AND is_deleted=0 AND easting !='' AND northing !='' AND easting !=0 AND northing !=0.

下面是我将从中提取记录的表结构:

代码语言:javascript
运行
复制
CREATE TABLE "g_livcol" ("id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL,
"accession_no" INTEGER NOT NULL ,
"isLive" VARCHAR(5),
"taxanomic_name" VARCHAR(50),
"genus_name" VARCHAR(50),
"taxanomic_species" VARCHAR(50),
taxanomic_species2 VARCHAR(50),
taxon_is_epithet VARCHAR(50),
taxanomic_cv VARCHAR(50),
sec_key INTEGER,
site VARCHAR(5),
location_key VARCHAR(20),
sub_location1 INTEGER, 
sub_location2 INTEGER,
count_of_loc_key INTEGER,
accession_quantity INTEGER,
canopy INTEGER,
height INTEGER,
easting DOUBLE,
northing DOUBLE, 
created_at DATETIME,
updated_at DATETIME, 
is_deleted BOOL DEFAULT (0))
EN

回答 1

Stack Overflow用户

发布于 2016-01-13 19:25:16

你有没有为它创建索引?我认为最有鉴别力的列是site,所以您需要一个以它开头的索引。

此外,你有它的covering index吗?您只读取了三列,并从相当宽的表中测试了另一列,因此覆盖索引在这里会有所帮助:

代码语言:javascript
运行
复制
create index tableName_i1 on tableName (site, is_deleted, easting, northing, id);

索引是“覆盖”的,因为它包含了查询所需的所有内容。

实际上,由于计数中的"*“,优化器可能没有意识到这一点,所以我建议使用count(id)而不是count(*)。这是相同的,因为id是主键,但它使优化器更清楚地知道它不需要读取任何其他内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34763991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档