我有一個離子角度應用程式,我使用 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';
我有以下創建陳述句,然后應用程式啟動:
表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);
`
表艾
`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);
);`
餐桌世界
`
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, '
查詢再次快速運行。
想知道解決方案是什么?(同樣的概念適用于我的實時資料庫非常快)
(注意:我已經削減了創建陳述句,因為它們太長而無法發布)
謝謝
uj5u.com熱心網友回復:
您可以用一個 join 替換兩個相關的子查詢:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460032.html
