SQLite 查询需要很长时间 - Angular Ionic
SQLite queries taking a long time - Angular Ionic
我有一个 ionic angular 应用程序,我使用 SQLite 作为本地数据库。
我有以下查询:
const statement = ' SELECT fl.*, ai.*, fl.uuid as fluuid ' +
'(SELECT aName FROM world WHERE world.uuid = fl.daUUID) as depName, ' +
'(SELECT country FROM world WHERE world.uuid = fl.daUUID) as depCountry, ' +
' FROM fl, ai WHERE fl.userUUID= ? AND ai.uuid=fl.aiUUID ORDER BY Date ASC';
我有以下用于启动应用程序的创建语句:
table fl
`create TABLE IF NOT EXISTS fl
(
ID int primary key,
daUUID text null,
aaUUID text null,
aiUUID text null,
uuid text null,
userUUID text null,
updateTimeStamp DATETIME not null DEFAULT CURRENT_TIMESTAMP
);
create index IF NOT EXISTS ix1Fl1
on fl (userUUID, aiUUID, uuid);
create index IF NOT EXISTS ix1Fl2
on fl (daUUID, aaUUID);
`
table ai
`create TABLE IF NOT EXISTS ai
(
aiID int primary key,
uuid TEXT null,
userUUID TEXT null,
updateTimeStamp DATETIME not null DEFAULT CURRENT_TIMESTAMP
);
create index IF NOT EXISTS ix1Ai1 on ai (uuid, userUUID);
);`
table世界
`
create table IF NOT EXISTS world
(
aiID int primary key,
uuid text null,
userUUID text null,
updateTimeStamp timestamp default CURRENT_TIMESTAMP
);create index IF NOT EXISTS ix1world1
on world (uuid, userUUID);`
正如所见,我已经添加了索引但是(就像我的实时数据库一样)但是查询运行缓慢,
但是如果我从查询中删除它
'(SELECT aName FROM world WHERE world.uuid = fl.daUUID) as depName, ' +
'(SELECT country FROM world WHERE world.uuid = fl.daUUID) as depCountry, ' +
查询再次快速运行。
想知道解决这个问题的方法是什么? (同样的概念非常适用于我的实时数据库)
(注意:我已经删减了 create 语句,因为它们对 post 来说太长了)
谢谢
您可以用一个连接替换两个相关的子查询:
SELECT fl.*, ai.*, fl.uuid as fluuid,
world.aName AS depName,
world.country as depCountry
FROM fl, ai
JOIN world ON world.uuid = fl.daUUID
WHERE fl.userUUID= ? AND ai.uuid = fl.aiUUID
ORDER BY Date ASC
甚至:
SELECT fl.*, ai.*, fl.uuid as fluuid,
world.aName AS depName,
world.country as depCountry
FROM fl
JOIN ai ON ai.uuid = fl.aiUUID
JOIN world on world.uuid = fl.daUUID
WHERE fl.userUUID = ?
ORDER BY Date ASC
我有一个 ionic angular 应用程序,我使用 SQLite 作为本地数据库。
我有以下查询:
const statement = ' SELECT fl.*, ai.*, fl.uuid as fluuid ' +
'(SELECT aName FROM world WHERE world.uuid = fl.daUUID) as depName, ' +
'(SELECT country FROM world WHERE world.uuid = fl.daUUID) as depCountry, ' +
' FROM fl, ai WHERE fl.userUUID= ? AND ai.uuid=fl.aiUUID ORDER BY Date ASC';
我有以下用于启动应用程序的创建语句:
table fl
`create TABLE IF NOT EXISTS fl
(
ID int primary key,
daUUID text null,
aaUUID text null,
aiUUID text null,
uuid text null,
userUUID text null,
updateTimeStamp DATETIME not null DEFAULT CURRENT_TIMESTAMP
);
create index IF NOT EXISTS ix1Fl1
on fl (userUUID, aiUUID, uuid);
create index IF NOT EXISTS ix1Fl2
on fl (daUUID, aaUUID);
`
table ai
`create TABLE IF NOT EXISTS ai
(
aiID int primary key,
uuid TEXT null,
userUUID TEXT null,
updateTimeStamp DATETIME not null DEFAULT CURRENT_TIMESTAMP
);
create index IF NOT EXISTS ix1Ai1 on ai (uuid, userUUID);
);`
table世界
`
create table IF NOT EXISTS world
(
aiID int primary key,
uuid text null,
userUUID text null,
updateTimeStamp timestamp default CURRENT_TIMESTAMP
);create index IF NOT EXISTS ix1world1
on world (uuid, userUUID);`
正如所见,我已经添加了索引但是(就像我的实时数据库一样)但是查询运行缓慢,
但是如果我从查询中删除它
'(SELECT aName FROM world WHERE world.uuid = fl.daUUID) as depName, ' +
'(SELECT country FROM world WHERE world.uuid = fl.daUUID) as depCountry, ' +
查询再次快速运行。
想知道解决这个问题的方法是什么? (同样的概念非常适用于我的实时数据库)
(注意:我已经删减了 create 语句,因为它们对 post 来说太长了)
谢谢
您可以用一个连接替换两个相关的子查询:
SELECT fl.*, ai.*, fl.uuid as fluuid,
world.aName AS depName,
world.country as depCountry
FROM fl, ai
JOIN world ON world.uuid = fl.daUUID
WHERE fl.userUUID= ? AND ai.uuid = fl.aiUUID
ORDER BY Date ASC
甚至:
SELECT fl.*, ai.*, fl.uuid as fluuid,
world.aName AS depName,
world.country as depCountry
FROM fl
JOIN ai ON ai.uuid = fl.aiUUID
JOIN world on world.uuid = fl.daUUID
WHERE fl.userUUID = ?
ORDER BY Date ASC